1. 什么是同源策略
- 同源策略截型,它是由Netscape提出的一個(gè)著名的安全策略。
現(xiàn)在所有支持JavaScript 的瀏覽器都會使用這個(gè)策略儒溉。
所謂同源是指宦焦,域名,協(xié)議睁搭,端口相同赶诊。
當(dāng)一個(gè)瀏覽器的兩個(gè)tab頁中分別打開來 百度和谷歌的頁面
當(dāng)瀏覽器的百度tab頁執(zhí)行一個(gè)腳本的時(shí)候會檢查這個(gè)腳本是屬于哪個(gè)頁面的,
即檢查是否同源园骆,只有和百度同源的腳本才會被執(zhí)行舔痪。
如果非同源,那么在請求數(shù)據(jù)時(shí)锌唾,瀏覽器會在控制臺中報(bào)一個(gè)異常锄码,提示拒絕訪問。
2.什么是跨域晌涕?跨域有幾種實(shí)現(xiàn)形式
- 跨域是指因同源策略的限制滋捶,所以誕生了跨域,指
http://a.jrg.com
可以向http://b.jrg.com
請求數(shù)據(jù)余黎。 - 跨域4種實(shí)現(xiàn)方式:
- jsonp
- 通過
<script></script>
實(shí)現(xiàn)重窟,因?yàn)檫@種方法引用非同源數(shù)據(jù)時(shí),瀏覽器不阻止 - 實(shí)現(xiàn)方法是在URL參數(shù)中添加雙方談好的參數(shù)惧财,當(dāng)對方接收到URL中有該參數(shù)巡扇,便將拼裝好的data返回,這時(shí)我們JS代碼中也有這樣的函數(shù)垮衷,就會執(zhí)行
- 通過
- 降域
- 降域是指降低域名來進(jìn)行跨域厅翔,如:
-
http://a.jrg.com
和http://b.jrg.com
- 兩個(gè)頁面通過
document.domain = "jrg,com"
-
- 降低域名就可以訪問,這種方法有限制搀突,就是主域要相同
- 降域是指降低域名來進(jìn)行跨域厅翔,如:
- cors
- 瀏覽器發(fā)現(xiàn)這次跨源AJAX請求是簡單請求刀闷,就自動在頭信息之中,添加一個(gè)Origin字段仰迁。Origin字段用來說明甸昏,本次請求來自哪個(gè)源(協(xié)議 + 域名 + 端口)。服務(wù)器根據(jù)這個(gè)值徐许,決定是否同意這次請求施蜜。如果對方添加了
Access-Control-Allow-Origin: *
,服務(wù)器會返回響應(yīng)绊寻,瀏覽器請求數(shù)據(jù) - 需要注意的是,如果要發(fā)送
Cookie,Access-Control-Allow-Origin
就不能設(shè)為星號澄步,必須指定明確的冰蘑、與請求網(wǎng)頁一致的域名。 - 跨域資源共享 CORS 詳解
- 瀏覽器發(fā)現(xiàn)這次跨源AJAX請求是簡單請求刀闷,就自動在頭信息之中,添加一個(gè)Origin字段仰迁。Origin字段用來說明甸昏,本次請求來自哪個(gè)源(協(xié)議 + 域名 + 端口)。服務(wù)器根據(jù)這個(gè)值徐许,決定是否同意這次請求施蜜。如果對方添加了
- postMessage
- 通過
postMessage(data,origin)
這個(gè)H5的新API實(shí)現(xiàn)跨域村缸,當(dāng)通過某些動作或者事件出發(fā)后祠肥,就會利用window.frames[0].postMessage()
發(fā)送數(shù)據(jù)過去<iframe>
標(biāo)簽所嵌套的窗口,對方j(luò)s代碼中如果有監(jiān)聽梯皿,則可以進(jìn)行跨域 - html5 postMessage解決跨域仇箱、跨窗口消息傳遞
- 通過
- jsonp
3.JSONP 的原理是什么
- 通過
<script></script>
實(shí)現(xiàn),因?yàn)檫@種方法引用非同源數(shù)據(jù)時(shí)东羹,瀏覽器不阻止- 實(shí)現(xiàn)方法是在URL參數(shù)中添加雙方談好的參數(shù)剂桥,當(dāng)對方接收到URL中有該參數(shù),便將拼裝好的data返回属提,這時(shí)我們JS代碼中也有這樣的函數(shù)权逗,就會執(zhí)行,如:
4.CORS是什么
- 瀏覽器發(fā)現(xiàn)這次跨源AJAX請求是簡單請求冤议,就自動在頭信息之中斟薇,添加一個(gè)Origin字段。Origin字段用來說明恕酸,本次請求來自哪個(gè)源(協(xié)議 + 域名 + 端口)堪滨。服務(wù)器根據(jù)這個(gè)值,決定是否同意這次請求蕊温。如果對方添加了
Access-Control-Allow-Origin: *
袱箱,服務(wù)器會返回響應(yīng),瀏覽器請求數(shù)據(jù)- 需要注意的是寿弱,如果要發(fā)送
Cookie
犯眠,Access-Control-Allow-Origin
就不能設(shè)為星號,必須指定明確的症革、與請求網(wǎng)頁一致的域名筐咧。
- 需要注意的是寿弱,如果要發(fā)送
5.根據(jù)視頻里的講解演示三種以上跨域的解決方式
- Jsonp & Cors
- postMessage
- 降域
** 跨域處理方式代碼 **