進(jìn)階13 跨域

什么是同源策略

一個定義
如果協(xié)議,端口(如果指定了一個)和域名對于兩個頁面是相同的,則兩個頁面具有相同的。
同源策略限制從一個源加載的文檔或腳本如何與來自另一個源的資源進(jìn)行交互。這是一個用于隔離潛在惡意文件的關(guān)鍵的安全機(jī)制。

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

出于安全方面考慮,瀏覽器根據(jù)同源策略來限制不同源的頁面之間的交互,雖然這些限制是必要的,但是有時很不方便,合理的用途也受到影響,跨域就是去規(guī)避瀏覽器同源策略的限制來實(shí)現(xiàn)你想要的功能,目前跨域一般使用JSONP與CORS,特殊情況下有降域與postMessage等方法

JSONP 的原理是什么

由于同源策略使得網(wǎng)頁無法訪問與其不同源的網(wǎng)頁的內(nèi)容,但是在web頁面中,js文件的調(diào)用不受同源策略的影響,因此可以在遠(yuǎn)程服務(wù)器上設(shè)法把數(shù)據(jù)裝進(jìn)js格式的文件里,供客戶端調(diào)用和進(jìn)一步處理恰巧我們已經(jīng)知道有一種叫做JSON的純字符數(shù)據(jù)格式可以簡潔的描述復(fù)雜數(shù)據(jù),更妙的是JSON還被js原生支持,所以在客戶端幾乎可以隨心所欲的處理這種格式的數(shù)據(jù),為了便于客戶端使用數(shù)據(jù),逐漸形成了一種非正式傳輸協(xié)議,人們把它稱作JSONP,該協(xié)議的一個要點(diǎn)就是允許用戶傳遞一個callback參數(shù)給服務(wù)端,然后服務(wù)端返回?cái)?shù)據(jù)時會將這個callback參數(shù)作為函數(shù)名來包裹住JSON數(shù)據(jù),這樣客戶端就可以隨意定制自己的函數(shù)來自動處理返回?cái)?shù)據(jù)了。

CORS是什么

CORS是一個W3C標(biāo)準(zhǔn),全稱是"跨域資源共享"(Cross-origin resource sharing)。
它允許瀏覽器向跨源服務(wù)器,發(fā)出XMLHttpRequest
請求,從而克服了AJAX只能同源使用的限制。
整個CORS通信過程,都是瀏覽器自動完成,不需要用戶參與。對于開發(fā)者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發(fā)現(xiàn)AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺。
因此,實(shí)現(xiàn)CORS通信的關(guān)鍵是服務(wù)器。只要服務(wù)器實(shí)現(xiàn)了CORS接口,就可以跨源通信。(瀏覽器必須IE10以上才支持)

降域

相同父級域名下的兩個子頁面需要相互訪問時使用document.domain = 'xxx.com'(相同的父級域名)即可`

//頁面A
<body>    
    <div class="main">
        <input type="text" placeholder="http://a.jrg.com/a.html">
    </div>
    <iframe src="http://b.jrg.com/b.html" frameborder="1"></iframe>
    <script>
        document.querySelector('.main input').addEventListener('input', function () {
            window.frames[0].document.querySelector('input').value = this.value
        })
        document.domain = 'jrg.com'
    </script>
</body>

/////////////////////////////////////////////////

<body>//頁面B
    <div class="ct">
        <input type="text" placeholder="http://b.jrg.com/b.html">
    </div>
    <script>
        document.querySelector('input').addEventListener('input', function () {
            window.parent.document.querySelector('input').value = this.value
        })
        document.domain = 'jrg.com'
    </script>

</body>

JSONP跨域與CORS跨域

最后編輯于
?著作權(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)容

  • 什么是同源策略 同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如...
    饑人谷_嚴(yán)琰閱讀 258評論 0 0
  • 題目1: 什么是同源策略 瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權(quán)的情...
    饑人谷_星璇閱讀 181評論 0 0
  • 題目1: 什么是同源策略 瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權(quán)的情...
    cheneyzhangch閱讀 250評論 0 0
  • 1.什么是同源策略? 同源策略是指,瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明...
    upup_dayday閱讀 209評論 0 0
  • 不想入睡 害怕每次開始的措手不及 和每次見到天亮的不安恐懼 想一直下去 白天或黑夜 我想一直繼續(xù) 不想入睡 害怕夢...
    onlyonedu閱讀 168評論 0 0

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