同源策略(Same origin Polity)
瀏覽器出于安全考慮,只會于本域下的接口交互。不同源的客戶端腳本,在沒有明確授權(quán)的情況下,不能讀寫對方資源。
什么是本域?
- 同協(xié)議: 如果是http或者https
- 同域名: 如果是http://xxxx.com/a || http://xxxx.com/b
- 同端口: 如果是80端口
看看不同源:
- http://xxx.com/admin/index.js || https://xxx.com/index.php (協(xié)議不同)
- http://xxx.com/admin/index.js || http://zzz.com/admin/index.js (域名不同,域名要完全相同)
- http://xxx.com:80/admin/index.js || http://xxx.com:8080/admin/index.js(端口不同,第一個是80)
JSONP 解決 跨域
需要后端支持
用script標(biāo)簽去請求,請求的數(shù)據(jù)由后臺,
CORS 跨域資源共享
跨來源資源共享(CORS)是一份瀏覽器技術(shù)的規(guī)范,提供了 Web 服務(wù)從不同網(wǎng)域傳來沙盒腳本的方法,以避開瀏覽器的同源策略,是 JSONP 模式的現(xiàn)代版。與 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以讓網(wǎng)頁設(shè)計師用一般的 XMLHttpRequest,這種方式的錯誤處理比 JSONP要來的好。另一方面,JSONP 可以在不支持 CORS 的老舊瀏覽器上運作。現(xiàn)代的瀏覽器都支持 CORS。
122013@2x.png
postMessage
142907@2x.png