- 什么是跨域?
- 為什么不能跨域?
- 跨域的解決方案都有哪些(解決方法/適用場景/get還是post)?

二、為什么不能跨域?
瀏覽器有一個同源策略,用來保護用戶的安全。
如果沒有這個策略的話,a網站就可以操作b網站的頁面,這樣將會導致b網站的頁面發生混亂,甚至信息被獲取,包括服務器端發來的session。
三、跨域的解決方案
1、JSONP
解決方法 | 0)瀏覽器是可以引入不同域下的JS文件,利用這個特性,來實現跨域。 1)直接在a.com頁面,添加一個script標簽,src屬性為b網站的頁面url, 並且傳入一個callback參數。 <script>
function dosomething(jsonData){
2)b網站的handlerData.php,實際做的操作就是:生成一段可執行的 JS代碼,調用你傳入的dosomething函數。 |
應用場景 | 常用的解決方案 |
請求方式 | get :它本質上是下載一個資源文件。 |
2、document.domain
應用場景 | 必須滿足兩個條件 1)頁面中嵌入firame框架。 2)當前頁面和iframe中的頁面,主域、協議、端口必須完全一致。 |
解決方法 | 比如頁面地址是http://a.baidu.com/,嵌入的iframe是 http://b.baidu.com/ 分別設置頁面和iframe的document.domain為: baidu.com,就可以解決問題。 |
3、使用H5中的window.postMessage
解決方法 | window.postMessage(message,targetOrigin) 方法是html5新引進的特性,可以使用它來向其它 的window對象發送消息,無論這個window對象是屬於同源或不同源,目前IE8+、FireFox、Chrome、 Opera等瀏覽器都已經支持window.postMessage方法。 |
應用場景 | 1)頁面和其打開的新窗口的數據傳遞 2).多窗口之間消息傳遞 3).頁面與嵌套的iframe消息傳遞 |
4、CORS方案
解決方法 | CORS定義一種跨域訪問的機制,可以讓AJAX實現跨域訪問。CORS 允許一個域上的網絡應用 向另一個域提交跨域 AJAX 請求。實現此功能非常簡單,只需由服務器發送一個響應標頭即可。 header("Access-Control-Allow-Origin", "*");
|
應用場景 | 跨域post提交數據 |
請求方式 | post |
參考鏈接 | 詳細介紹請查看: |