跨域方案

同源策略

同源策略(Same origin policy)是瀏覽器最核心也最基礎(chǔ)的安全功能,同源策略會(huì)阻止一個(gè)域的 javascript 腳本和另外一個(gè)域的內(nèi)容進(jìn)行交互。所謂同源(即指在同一個(gè)域)就是兩個(gè)頁面具有相同的協(xié)議(protocol)、主機(jī)(host)和端口號(hào)(port)

為什么瀏覽器不支持跨域

  • 無法讀取非同源網(wǎng)頁的 Cookie、LocalStorage 和 IndexedDB
  • 無法接觸非同源網(wǎng)頁的 DOM
  • 無法向非同源地址發(fā)送ajax

實(shí)現(xiàn)跨域的方案

所有實(shí)現(xiàn)跨域方案demo 以提交至github,有需要可以查看

  • jsonp
    JSONP 由于采用 script 資源文件請(qǐng)求,而資源請(qǐng)求為 GET 請(qǐng)求,故僅在 GET 請(qǐng)求中使用 JSONP 跨域請(qǐng)求。使用 ajax 請(qǐng)求網(wǎng)站,而服務(wù)器返回的 JSONP callback 是惡意執(zhí)行代碼,導(dǎo)致返回瀏覽器后會(huì)自動(dòng)執(zhí)行惡意代碼,威脅數(shù)據(jù)安全。(XSS 攻擊)
  • cors
    若攜帶憑證發(fā)起請(qǐng)求,CORS 只能指定一個(gè)允許源,不能使用通配符和指定多個(gè)源。
  • postMessage
  • document.domain
    ? 在根域范圍內(nèi),瀏覽器允許把 domain 屬性的值設(shè)置為它的上一級(jí)域。例如,在 a.test.com 域內(nèi),可以把domain 設(shè)置為 test.com16 所以 document.domain 只能處理父域相同,子域不同的情況。
  • window.name
  • location.hash
  • http-proxy
  • nginx
  • websocket
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容