日夜談——同源策略與跨域

1.什么是同源策略

同domain即域名(或ip),同端口,同協(xié)議視為同一個(gè)域,一個(gè)域內(nèi)的腳本僅僅具有本域內(nèi)的權(quán)限,可以理解為本域腳本只能讀寫本域內(nèi)的資源,而無法訪問其它域的資源。這種安全限制稱為同源策略。

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

跨域是指從一個(gè)域名的網(wǎng)頁去請(qǐng)求另一個(gè)域名的資源。比如從http://www.baidu.com/ 頁面去請(qǐng)求 http://www.google.com 的資源??缬虻膰?yán)格一點(diǎn)的定義是:只要一個(gè)源向另一個(gè) 協(xié)議,域名,端口有任何一個(gè)的不同的源請(qǐng)求資源,就被當(dāng)作是跨域。

跨域?qū)崿F(xiàn)形式:

  1. JSONP
  2. CORS:跨域資源共享(Cross-Origin Resource Sharing)
  3. 降域
  4. postMessage()
3. JSONP 的原理是什么

JSONP基本思想是,網(wǎng)頁通過添加一個(gè)<script>元素,向服務(wù)器請(qǐng)求JSON數(shù)據(jù),這種做法不受同源政策限制;服務(wù)器收到請(qǐng)求后,將數(shù)據(jù)放在一個(gè)指定名字的回調(diào)函數(shù)里傳回來,之后有例子。

4. CORS是什么

CORS的全稱是Cross-Origin Resources Sharing,它允許瀏覽器向跨源服務(wù)器,發(fā)出請(qǐng)求,從而克服了AJAX只能同源使用的限制。
原理
<li>CORS需要瀏覽器和服務(wù)器同時(shí)支持。目前,所有瀏覽器都支持該功能,IE瀏覽器不能低于IE10;
<li>整個(gè)CORS通信過程,都是瀏覽器自動(dòng)完成,不需要用戶參與。對(duì)于開發(fā)者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發(fā)現(xiàn)AJAX請(qǐng)求跨源,就會(huì)自動(dòng)添加一些附加的頭信息,有時(shí)還會(huì)多出一次附加的請(qǐng)求,但用戶不會(huì)有感覺。
<li>實(shí)現(xiàn)CORS通信的關(guān)鍵是服務(wù)器。只要服務(wù)器實(shí)現(xiàn)了CORS接口,就可以跨源通信。

5.實(shí)現(xiàn)跨域的一些方法
JSONP實(shí)現(xiàn)
jsonp.png

JSONP demo

CROS實(shí)現(xiàn)
CROS.png

代碼

降域?qū)崿F(xiàn)
降域.png

代碼

postMessage實(shí)現(xiàn)

postMessage.png

代碼

感謝瓜子觀眾:


版權(quán)歸饑人谷peter和饑人谷所有,若有轉(zhuǎn)載,請(qǐng)注明來源

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

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

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