什麼是跨域?跨域的解決方法。
一、什麼是跨域?
在瞭解什麼是跨域的時候,我們首先要了解一個概念,叫
同源策略
,什麼是同源策略呢,就是我我們的瀏覽器出於安全考慮,只允許與
本域
下的介面互動。不同源的客戶端指令碼在沒有明確授權的情況下,不能讀寫對方的資源。
是什麼意思呢,就比如你剛剛登入了淘寶買了東西,但是你現在又點進去了另外一個網站,那麼你現在的淘寶賬戶是屬於登入狀態,而並沒有登出,所以你現在點進去的這個網站可以看到你的賬戶資訊,並操作你的賬戶資訊,這樣子就很危險。
我們在來了解一個概念,就是本域,什麼是本域呢?就是同協議,同域名,同埠就叫本域。
本域
從這個圖片我們可以清楚的瞭解到,什麼是本域,以及什麼時候跨域。
瀏覽器請求的三種報錯:
1、請求未傳送
2、請求傳送後,伺服器發現不一樣,伺服器未反應。
3、請求傳送,伺服器有反應,資料返回的時候,瀏覽器發現不對,被攔截。
二、跨域的解決方法
那如果非要實現跨域,我們應該怎麼辦呢?
1、JSONP (JSON with padding)
就是與後端協商好,在請求資料返回資料的時候以字串的格式返回。
script src = ‘xxx。com’ callback = showDate
function showDate (ret) {
console。log(ret)
}
這個時候就跨域了,JSONP 可以在IE10以下的瀏覽器去獲取資料。
2、CORS (跨資源共享)
在響應頭裡面寫上
res。setHeader(‘ Access - Contorl - Allow - Origin’ ,‘http://localhost:8080’)
只要響應頭裡面的Origin裡面本域(協議、域名、埠)一樣,就可以接受到資料
3、降域和PostMessage
3.1 降域
document。domain = ‘xxx。com’
需要本域中的域名和埠一樣
3.2 PostMessage
window。frames[0],PostMessage(this,value)
window。addEventListener(‘message’,function(e)){} //呼叫message,監聽對方傳送的訊息