IE中iframe跨域訪問
1 什麼叫跨域?
指在A系統(第一方)中通過URL直接呼叫B系統(第三方),並且兩個系統分別部署在不同的域內,簡單的理解就是訪問這兩個系統需要不同的IP。後面說明也已A系統、B系統為例。
2 跨域會引發什麼問題?
在IE中,A系統中的iframe或者frame跨域訪問了B系統一個資源時,IE瀏覽器預設設定是禁用第三方Cookie的,這就導致向B系統傳送請求時丟失了JSESSIONID,從而B系統伺服器中就無法得到session物件,就會引發一系列問題。關於Cookie和session的關係,可以看前一篇文章Session深度解析,這裡不再贅述。
IE中如此處理可能也是出於安全考慮,經測試,在Chrome、FireFox中預設是允許第三方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
相關文章
- iframe 元素跨域訪問跨域
- localStorage 跨域訪問跨域
- 跨源通訊、跨域訪問跨域
- 同源策略和跨域訪問跨域
- Vue嵌入iframe,iframe如何跨域呼叫vue內路由Vue跨域路由
- iframe 跨域高度自適應跨域
- Laravel API 允許跨域訪問LaravelAPI跨域
- iframe跨域的幾種常用方法跨域
- 解決JS跨域訪問的問題JS跨域
- vue_cli3.x 跨域訪問Vue跨域
- springboot配置CORS允許跨域訪問Spring BootCORS跨域
- spring boot解決跨域訪問配置Spring Boot跨域
- 防止跨域問題無法訪問網址跨域
- 跨域庫herryPostMessage.js的一些優化,多iframe跨域跨域JS優化
- Laravel 中跨域問題Laravel跨域
- 阿里雲圖片跨域訪問設定阿里跨域
- Angular應用解決跨域訪問的問題Angular跨域
- Nginx解決前端訪問資源跨域問題Nginx前端跨域
- IE9 跨域請求相容IE9跨域
- 跨域問題(普通跨域和springsecurity跨域)跨域SpringGse
- 【Thinkphp6】api介面使用apipost等工具可以正常訪問,專案中訪問報跨域問題PHPAPI跨域
- 解決Django本地介面不能跨域訪問的問題Django跨域
- JavaScript 跨域訪問(API介面)實現原理分析JavaScript跨域API
- PHP 設定多域名允許跨域訪問PHP跨域
- 跨域訪問是什麼!怎麼解決?跨域
- JS中的跨域問題JS跨域
- 關於父視窗獲取跨域iframe子視窗中的元素跨域
- ASP.NET MVC & WebApi 中實現Cors來讓Ajax可以跨域訪問ASP.NETMVCWebAPICORS跨域
- 跨域問題跨域
- 分享跨域訪問的解決方案與基礎分析跨域
- 搞懂:前端跨域問題JS解決跨域問題VUE代理解決跨域問題原理前端跨域JSVue
- 封裝一個postMessage庫,進行iframe跨域互動封裝跨域
- 詳解瀏覽器跨域訪問的幾種辦法瀏覽器跨域
- AJAX 跨域問題跨域
- djangorestjwtvue跨域問題DjangoRESTJWTVue跨域
- VUE跨域問題Vue跨域
- 前端跨域問題前端跨域
- springboot 跨域問題Spring Boot跨域
- Nginx跨域問題Nginx跨域