你真的知道跨域嗎

wade3po發表於2019-01-25

在現在前後分離的大勢下,跨域幾乎是不可避免的問題,無論是開發時還是部署線上,跨域我們都會遇見,但是我們真的理解跨域嗎?

為什麼會產生跨域?最主要的原因是瀏覽器同源策略的的限制,主要是為了安全性考慮。同源是指協議、域名和埠是否是相同的。只要是不同源,那麼就會產生跨域,限制範圍有cookie、localstorage、indexDB、DOM、AJAX這些無法獲取或者是請求不能傳送。而img、script、ifram、link這幾個標籤卻沒有跨域的問題。

有上面的幾個限制,相應的也有幾個解決跨域的方法。

document.domain

兩個一級域名相同,二級域名不同可以通過document.domain傳遞資料,也就是共享cookie。只適用於 Cookie 和 iframe

window.name

主要是ifram使用,只要在同一個網頁裡面,前一個設定了name屬性,後一個視窗可以呼叫name屬性的資料,而且可以放置很長的資料字串。

window.postMessage

H5新引入的,有點類似window.name方法,在一個視窗新增postMessage之後另一個想要獲取的視窗直接監聽message就可以獲得資料。Localstorage也可以通過這個方法傳遞資料。

JSONP

原理其實就是使用script不受同源策略的影響,可以通過script來請求,也可以使用ajax的jsonp方法。Jsonp Jsonp就是用的script不受同源策略的原理,只能傳送get請求。

WebSocket

只知道可以解決跨域問題,但是不知道什麼原理。

CORS

跨源資源分享,它已經被W3C納入標準,是AJAX請求跨域最簡單的解決方法,CORS就是伺服器加一個請求頭,允許跨域請求訪問。

代理

跨域就是因為同源策略的影響,那麼使用第三方代理也可以解決跨域問題。

跨域的解決方法大概就這幾個,可以自行百度詳細的方法

歡迎關注Coding個人筆記 公眾號

相關文章