|
mashup 是一個 Web 應用程序,它集成了來自多個源的內容并將其交付到一個頁面中進行顯示。服務器向每個內容源發(fā)出請求,解析收到的信息,并將結果綜合到一個頁面中發(fā)給瀏覽器,如 圖 1 所示。 圖 1. 混合來自多個源的內容 Asynchronous JavaScript + XML(Ajax)應用程序 使 Web 頁面能從服務器獲取內容并使用 JavaScript™ 代碼異步地在適當位置進行自我更新,如 圖 2 所示。這樣,用戶就可以與富用戶界面 (UI) 進行交互而無需重新加載整個頁面。服務器向瀏覽器發(fā)送初始頁面,后者回調服務器以獲取更新后的內容。異步的 JavaScript 代碼調用頻繁使用 XML 來編碼數據;但是,其他的數據格式則更通用,如 JavaScript Object Notation (JSON)、HTML 和分隔文本。 圖 2. 使用 Ajax 的交互式數據顯示 Ajax mashup 是一種混合的 Web 應用程序。它使用 Ajax 技術來顯示富 UI,此類富 UI 使用從多個源異步檢索到的內容在適當位置進行自我更新。服務器向瀏覽器發(fā)送初始頁面,后者發(fā)出調用以檢索更新后的內容。這些調用可從瀏覽器直接發(fā)往第三方源或者發(fā)回初始服務器,初始服務器用作第三方內容的代理。
當設計包含當前瀏覽器環(huán)境的元素時,沒有人注意到 Ajax mashup。瀏覽器、超文本傳輸協(xié)議(HTTP)或 HTML 或專門設計用于容納瀏覽器的(以一種安全而健壯的方式)異步檢索多個源中內容的功能的 XHTML 都沒有內置任何組件。World Wide Web Consortium (W3C) HTTP 規(guī)范中的一些可能用于 mashup 的一些特性(如 Document Object Model (DOM) Level 3 Load 和 Save Specification)并未由大多數瀏覽器完全實現,或是根本沒有實現。 Dynamic HTML (DHTML) 開始時不與動態(tài)檢索到的內容結合使用。動態(tài) Web 頁面的顯示和數據元素都與操作它們的腳本一起交付。這些腳本將顯示、隱藏、移動、創(chuàng)建和銷毀文檔對象以便實現動態(tài)效果,但是一旦需要從服務器獲取更多數據,原頁面就被新頁面取代。數據流與頁面重新加載同步。 因此,希望構建混合 Web 應用程序(現在稱為 mashup)的開發(fā)人員必須利用可用的技術設法對其進行擴展以滿足他們的需求。有兩種方法可使瀏覽器在無需重新加載頁面的情況下檢索內容:嵌入外部傳輸機制和使用瀏覽器本地對象執(zhí)行傳輸任務。 早期的解決方案是 Microsoft 的 Remote Scripting,它使用一個 Java™ applet 與服務器端組件交換 XML 格式的消息。此方法很快就因為供應商的爭論以及 Java Virtual Machine (JVM) 和安全模型的差異而變得不實用。 Microsoft 稍后構建了 很多開發(fā)人員使用 Macromedia Flash 的 XML 通信特性來構建可嵌入的組件與服務器進行通信。 由于外部傳輸機制相關的問題和依賴性,互聯(lián)網開發(fā)團體協(xié)作發(fā)現并開發(fā)了幾個瀏覽器本地的遠程調用方法。
請參閱 參考資料 中關于這些工具和技術的詳細信息的鏈接。
大多數可用于異步檢索內容的技術都繼承了 JavaScript 安全模型的安全性,它使腳本只與源于該腳本所屬頁面所在的同一服務器的元素進行交互。這就是所有瀏覽器都實現了的同源策略(Same Origin Policy)。 要讓 Web 頁面從第三方檢索內容,必須避開同源策略。常用的不受同源策略限制的例外是 使用
當前廣泛用于啟用 Ajax mashup 的工作區(qū)都會產生一些代價。當擴展瀏覽器的設計限制時,就會影響應用程序總體操作的其他方面。這種做法通常會導致應用程序的安全性或可伸縮性降低。 當受到瀏覽器的同源策略限制時,承載應用程序的服務器必須承擔獲取第三方內容并將其發(fā)送到客戶機的任務。服務器除提供常規(guī)的服務器功能外,還擔當第三方服務的客戶機的角色。 使用服務器作為每個客戶機事務的代理意味著大量用戶可能導致過度的服務器負載。使用此技術的應用程序需要設計成服務器端可伸縮,使用多個同等的服務器處理請求負載。 使用
很明顯,瀏覽器當前提供的用于 mashup 的工具不能構建同時具有可伸縮性和安全性的應用程序。開發(fā)人員必須找到從當前和長遠角度來看都有效的解決方案。 一種最近開發(fā)的內容檢索技術通過其 由于腳本必須了解彼此的地址并且它們自身之間必須協(xié)作以取得對協(xié)議的一致遵守,因此要確保信任。由于任何服務器交互都在每個組件本地并且與腳本間通信分離,因此不會暴露 cookie。 雖然仍不完美(例如,它依賴于設計行為以外的異常,并且查詢更改不如用事件激活來響應更改),但是這個解決方案比任何其他方案都更接近于提供瀏覽器本地的、安全的、頁面中的跨域通信。 請注意:James Burke 是 AOL Developer Network 的一名開發(fā)人員,他開創(chuàng)了片段標識符技術并將其構建到最新版本的 Dojo Toolkit JavaScript 庫中。 瀏覽器制造商和開發(fā)團體當前正在討論幾種可能的修改瀏覽器環(huán)境元素的方法,使其以 Ajax mashup 為構建目標。Web Hypertext Application Technology Working Group (WHATWG) 在其用于 Cross Document Messaging 機制的 Web Applications 1.0 Working Draft 的 7.3 節(jié)中提出了一個建議。Opera 瀏覽器已經實現了此特性。它指定了不同域中的 DOM 對象之間協(xié)作通信的方法,該方法允許消息的接收方根據消息的起源來選擇所要響應的消息。 Ian Hickson 以前任職于 Opera,現在任職于 Google。他提出了對現有的 Douglas Crockford 是任職于 Yahoo! 的一名 JavaScript 傳道者和架構師,他是全球最有造詣的 JavaScript 語言專家之一。您可在他的個人 Web 站點上及通過 Yahoo! Developer Network 找到很多他的解釋高級 JavaScript 技術的展示和文章。Crockford 提出的另一項計劃是 JSON,它是一種 Ajax 應用程序中廣泛使用的數據交換格式,其主要原因是易于被 JavaScript 解析并且不像 XML 那樣冗余。Crockford 編寫了兩個提議來將 mashup 敏感的元素構建到瀏覽器中。 幾個絕妙提議可幫助您應對此困境:
請參閱 參考資料 中關于這些提議的詳細信息的鏈接。
作為開發(fā)人員,我們都與這些討論的結果息息相關。通過參加討論,您可幫助設計最靈活、安全的瀏覽器改進,使所有人都能構建健壯而安全的富 Web 應用程序。我鼓勵您去尋找倡導瀏覽器改進的瀏覽器供應商和組織,并參與以下活動:
您可在本文的 參考資料 部分找到可作為起點的鏈接。 學習
|
|||||||||||||||||||||||||||||||||||||
|
|