冷面閻羅

          低調做人&&高調做事
          隨筆 - 208, 文章 - 3, 評論 - 593, 引用 - 0
          數(shù)據(jù)加載中……

          web應用的跨越訪問的解決方案

                做過跨越多個網(wǎng)站的Ajax開發(fā)的朋友都知道,如果在A網(wǎng)站中,我們希望使用Ajax來獲得B網(wǎng)站中的特定內容,如果A網(wǎng)站與B網(wǎng)站不在同一個域中,那么就出現(xiàn)了跨域訪問問題。

                Ajax的跨域訪問問題是現(xiàn)有的Ajax開發(fā)人員比較常遇到的問題。
                IE對于跨域訪問的處理是,彈出警告框,提醒用戶。如果用戶將該網(wǎng)站納入可信任網(wǎng)站,或者調低安全級別,那么這個問題IE就不會在提醒你。  
                   FireFox等其它非微軟的瀏覽器遇到跨域訪問,則解決方案統(tǒng)一是拒絕訪問。
                   有人說,IE是主流瀏覽器,只要它能正常使用就好了。此言差已,IE雖然能夠處理,但是是有前提的,要么用戶不厭其煩地在頁面彈出警告框之后點擊是(點擊否就不執(zhí)行該Ajax調用了),要么用戶將該網(wǎng)站納入可信任站點。這兩種做法,在企業(yè)管理系統(tǒng)的應用中倒是比較常見,因為系統(tǒng)管理員可以以行政手段保證用戶的行為。但是對于互聯(lián)網(wǎng)上的網(wǎng)站或者門戶開發(fā),這種做法則不行。
                   最近遇到了這個問題,需要在跨域訪問結束之后完成使主窗口出現(xiàn)一些特效,搜索了一些資料,通過不斷嘗試以及在不同瀏覽器中進行兼容性測試,找到了幾個可行的方案:
                   1、Web代理的方式。即用戶訪問A網(wǎng)站時所產(chǎn)生的對B網(wǎng)站的跨域訪問請求均提交到A網(wǎng)站的指定頁面,由該頁面代替用戶頁面完成交互,從而返回合適的結果。此方案可以解決現(xiàn)階段所能夠想到的多數(shù)跨域訪問問題,但要求A網(wǎng)站提供Web代理的支持,因此A網(wǎng)站與B網(wǎng)站之間必須是緊密協(xié)作的,且每次交互過程,A網(wǎng)站的服務器負擔增加,且無法代用戶保存session狀態(tài)。
                   2、on-Demand方式。MYMSN的門戶就用的這種方式,不過MYMSN中不涉及跨域訪問問題。動態(tài)控制script標記的生成,通過修改script標記的src屬性完成對跨域頁面的調用。此方案存在的缺陷是,script的src屬性完成該調用時采取的方式時get方式,如果請求時傳遞的字符串過大時,可能會無法正常運行。不過此方案非常適合聚合類門戶使用。
                   3、iframe方式。查看過醒來在javaeye上的一篇關于跨域訪問的帖子,他提到自己已經(jīng)用iframe的方式解決了跨域訪問問題。數(shù)據(jù)提交跟獲取,采用iframe這種方式的確可以了,但由于父窗口與子窗口之間不能交互(跨域訪問的情況下,這種交互被拒絕),因此無法完成對父窗口效果的影響。
                   4、用戶本地轉儲方式:IE本身依附于windows平臺的特性為我們提供了一種基于iframe,利用內存來“繞行”的方案,即兩個window之間可以在客戶端通過windows剪貼板的方式進行數(shù)據(jù)傳輸,只需要在接受數(shù)據(jù)的一方設置Interval進行輪詢,獲得結果后清除Interval即可。FF的平臺獨立性決定了它不支持剪貼板這種方式,而以往版本的FF中存在的插件漏洞又被fixed了,所以FF無法通過內存來完成暗渡陳倉。而由于文件操作FF也沒有提供支持(無法通過Cookie跨域完成數(shù)據(jù)傳遞),致使這種技巧性的方式只能在IE中使用。
                   5、我自己用于解決這類問題的方式:結合了前面幾種方式,在訪問A網(wǎng)站時,先請求B網(wǎng)站完成數(shù)據(jù)處理,再根據(jù)返回的標識來獲得所需的結果。這種方法的缺點也很明顯,B網(wǎng)站的負載增大了。優(yōu)點,對session也實現(xiàn)了保持,同時A網(wǎng)站與B網(wǎng)站頁面間的交互能力增強了。最重要的一點,這種方案滿足了我的全部需要.

          posted on 2007-06-17 16:17 冷面閻羅 閱讀(1140) 評論(0)  編輯  收藏 所屬分類: ajax

          主站蜘蛛池模板: 中方县| 阿荣旗| 盖州市| 岢岚县| 句容市| 广水市| 通河县| 洪雅县| 昌黎县| 双城市| 喀喇沁旗| 上饶市| 鄢陵县| 黎平县| 宜君县| 祥云县| 韶关市| 隆安县| 永修县| 阿荣旗| 海晏县| 大竹县| 武夷山市| 佛教| 邛崃市| 洞头县| 手机| 高唐县| 甘谷县| 平邑县| 武胜县| 大城县| 宜黄县| 鲁甸县| 沧州市| 秦皇岛市| 镇赉县| 万载县| 武宁县| 济阳县| 建德市|