同源策略、跨域

什么是同源策略##

同源策略是瀏覽器最基本的功能,同源指得是相同的域名、協(xié)議和端口號,不同的源的客戶端腳本在沒有明確授權(quán)的情況下,無法相互讀取對方的資源稱之為同源策略。

什么是跨域?跨域有幾種實(shí)現(xiàn)形式##

跨域即突破同源策略限制的方法,并且都需要得到服務(wù)端的支持,有如下幾種形式:

JSONP:html中script標(biāo)簽可以引入其他域下的js,比如引入線上的jquery庫。

  • 創(chuàng)建script標(biāo)簽,src的地址執(zhí)行后端接口,最后加個參數(shù)callback=function,其中function為本地定義的處理后端數(shù)據(jù)的函數(shù)
  • 服務(wù)端在收到請求后,解析參數(shù),計算返還數(shù)據(jù),輸出 function(data) 字符串
  • function(data)會放到script標(biāo)簽做為js執(zhí)行。此時會調(diào)用function函數(shù),將data做為參數(shù)

CORS:CORS 的表象是讓你覺得它與同源的 ajax 請求沒啥區(qū)別,代碼完全一樣。

  • 當(dāng)使用 XMLHttpRequest 發(fā)送請求時,瀏覽器發(fā)現(xiàn)該請求不符合同源策略,會給該請求加一個請求頭:Origin
  • 后臺進(jìn)行一系列處理,如果確定接受請求則在返回結(jié)果中加入一個響應(yīng)頭:Access-Control-Allow-Origin;如果其值包含域名或者 “”號?!?/em>”號表示允許任何域名向我們的服務(wù)端提交請求
  • 瀏覽器判斷該相應(yīng)頭中是否包含 Origin 的值,如果有則瀏覽器會處理響應(yīng),我們就可以拿到響應(yīng)數(shù)據(jù),如果不包含瀏覽器直接駁回,這時我們無法拿到響應(yīng)數(shù)據(jù)。

降域

使用document.domain的方法實(shí)現(xiàn)相同基礎(chǔ)域名之間的跨域
例:有三個域名
a.test.com
b.test.com
test.com
可在a.test.com和b.test.com加入document.domain = "test.com"實(shí)現(xiàn)以上三個域名之間的跨域。

postmessage

postmessage為window的方法,可實(shí)現(xiàn)跨文檔、多窗口、跨域消息的傳遞,postMessage(data,origin)方法接受兩個參數(shù),data是要傳遞的數(shù)據(jù),origin是目標(biāo)的源
參考參考:http://www.cnblogs.com/dolphinX/p/3464056.html

同源策略及跨域出錯演示##

同源策略.png
跨域出錯.png

JSONP跨域及CORS跨域演示##

JSONP跨域.png
CORS跨域.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容