1. 什么是同源策略
同源策略是瀏覽器為安全性考慮實(shí)施的重要的安全策略猎贴。限制來(lái)自不同源的資源對(duì)當(dāng)前的文檔讀取或設(shè)置某些屬性班缎。
同源:協(xié)議蝴光,域名,端口號(hào)相同吝梅。
協(xié)議 - http,https
域名 - www.baidu.com
端口號(hào) - http默認(rèn)為80虱疏,https默認(rèn)為443
2. 什么是跨域?跨域有幾種實(shí)現(xiàn)形式
跨域是突破同源策略的限制苏携,從一個(gè)頁(yè)面請(qǐng)求另一個(gè)不同域頁(yè)面的資源做瞪。
跨域的實(shí)現(xiàn)方式
一、 降域
針對(duì)主域名相同右冻,子域名不同的情況装蓬。如域名后綴相同的child1.a.com和child2.a.com,可設(shè)置document.domain = 'a.com',達(dá)到降域的目的纱扭,實(shí)現(xiàn)跨域訪問(wèn)牍帚。
二、JSONP
通過(guò)動(dòng)態(tài)插入script標(biāo)簽乳蛾,src值為需要加載資源的路徑暗赶。資源加載后執(zhí)行函數(shù)。只支持get請(qǐng)求肃叶,安全性不高蹂随。
三、CROS
跨域資源共享因惭,可以讓AJAX實(shí)現(xiàn)跨域訪問(wèn)岳锁。CROS使用自定義的http頭部,讓瀏覽器和服務(wù)器溝通蹦魔,溝通完成后決定響應(yīng)結(jié)果激率。(實(shí)現(xiàn)過(guò)程 -- 后臺(tái)返回結(jié)果中設(shè)置Access-Control-Allow-Origin的值)
四、HTML5 的 postMessage
支持跨文檔勿决,跨域消息傳遞乒躺。
3. jsonp 的原理是什么
利用script標(biāo)簽的可跨越性,在網(wǎng)頁(yè)中動(dòng)態(tài)創(chuàng)建并添加<script>標(biāo)簽低缩,然后在請(qǐng)求資源頁(yè)面的url上添加一個(gè)callback函數(shù)名作為參數(shù)聪蘸。后臺(tái)服務(wù)器將數(shù)據(jù)放在一個(gè)指定名稱的callback函數(shù)給傳回來(lái),由于網(wǎng)頁(yè)內(nèi)已定義callback函數(shù)表制,參數(shù)返回后健爬,函數(shù)便會(huì)立即執(zhí)行。
4. CORS是什么
CROS需要瀏覽器和服務(wù)器同時(shí)支持么介,目前所有瀏覽器都支持該功能娜遵,IE10以下不完全支持。
整個(gè)CROS過(guò)程壤短,都是瀏覽器自動(dòng)完成设拟。在瀏覽器發(fā)現(xiàn)AJAX請(qǐng)求跨域慨仿,會(huì)自動(dòng)添加一個(gè)origin字段的頭信息,告訴跨域的后臺(tái)纳胧,此次跨域請(qǐng)求是由哪個(gè)源發(fā)出的镰吆。服務(wù)器根據(jù)前端發(fā)過(guò)來(lái)的的跨域的ajax請(qǐng)求的origin字段,決定是否同意此次跨域訪問(wèn)跑慕。(后臺(tái)可設(shè)置一個(gè)標(biāo)頭万皿,決定是否通信)。