IE中iframe跨域訪問

他山之石頭發表於2013-10-30

1      什麼叫跨域?

       指在A系統(第一方)中通過URL直接呼叫B系統(第三方),並且兩個系統分別部署在不同的域內,簡單的理解就是訪問這兩個系統需要不同的IP。後面說明也已A系統、B系統為例。

2      跨域會引發什麼問題?

       在IE中,A系統中的iframe或者frame跨域訪問了B系統一個資源時,IE瀏覽器預設設定是禁用第三方Cookie的,這就導致向B系統傳送請求時丟失了JSESSIONID,從而B系統伺服器中就無法得到session物件,就會引發一系列問題。關於Cookiesession的關係,可以看前一篇文章Session深度解析,這裡不再贅述。

       IE中如此處理可能也是出於安全考慮,經測試,在ChromeFireFox中預設是允許第三方Cookie的,也就不會存在跨域引發的問題。這種跨域的情況通常出現在多個系統間互相嵌入某些功能。

3      如何解決?

       解決方案可以分兩個方面,一種是客戶端(需要訪問A系統的瀏覽器)處理,另一種是服務端(B系統)處理。

3.1  瀏覽器

3.1.1  放棄IE

       那是不可能的。

3.1.2  允許第三方Cookie

       工具 - Internet選項 - 隱私 - 高階 - 勾選替代自動cookie處理 - 確定。

3.1.3  設定可信站點

       訪問A系統前,將B系統的IP新增到可信站點中,這樣設定能比接受第三方Cookie安全些。

       工具 - Internet選項 - 安全 - 受信任的站點 - 站點 - 新增 - 確定。

3.2  伺服器

3.2.1  可以被整合的模組不需要Session

       侷限性太大。

3.2.2  P3P協議

       在B系統中允許被跨域訪問的功能模組中加入P3P響應頭,response.setHeader("P3P","CP=CAOPSA OUR");,記住是B系統中加,不是A系統。

       關於P3P的介紹可以看這篇文章http://www.cnblogs.com/_franky/archive/2011/03/16/1985954.html

       (完)

       本文來自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/13747943

相關文章