題目1: 什么是同源策略
瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒(méi)有明確授權(quán)的情況下,不能讀寫對(duì)方的資源。
題目2: 什么是跨域?跨域有幾種實(shí)現(xiàn)形式
同域:1.協(xié)議相同2域名相同3.端口相同
不滿足同域三個(gè)條件就叫跨域。
實(shí)現(xiàn)跨域的方式:
JSONP,缺點(diǎn)不安全只支持get請(qǐng)求.
CORS,兼容性,ie10以上才能用
降域,適用于同一個(gè)網(wǎng)站里多個(gè)子網(wǎng)站相互請(qǐng)求數(shù)據(jù),降到所有孩子用父親名,就變同域了
postmanager:相互發(fā)送消息,要不要隨你
題目3: JSONP 的原理是什么
先看例子:
<script src='http:/www.weather.com/weatherApi?hangzhou&callback'></script>
//返回?cái)?shù)據(jù)后是這種格式
<script>
callback({
name:hanzhou,
temperature:42
})
</script>
//我的js中定義了一個(gè)callback函數(shù)
<script>
function callback(){
//....
}
callback()
</script>//到這里就獲得了與我不同域的weather.com傳回來(lái)的數(shù)據(jù)并且可以使用
原理:利用頁(yè)面引用的js可以是不同域的文件這一特性。當(dāng)然也需要與服務(wù)器約好,服務(wù)器配合傳輸數(shù)據(jù)才能實(shí)現(xiàn)。
缺點(diǎn):有安全隱患,以為接受的數(shù)據(jù)是直接作為js運(yùn)行,萬(wàn)一服務(wù)器不懷好意傳輸惡意js代碼,那就玩完了,只支持get請(qǐng)求。
題目4: CORS是什么
cors有點(diǎn)像有名字有照片的專屬通行證。這個(gè)通行證誰(shuí)看?看門的(瀏覽器)瀏覽器發(fā)現(xiàn)網(wǎng)頁(yè)跨域請(qǐng)求后給你加個(gè)標(biāo)簽(請(qǐng)求頭),origin,服務(wù)器看到這個(gè)標(biāo)簽后會(huì)決定發(fā)不發(fā)通行證,通行證會(huì)有url,瀏覽器看這個(gè)通行證上地址跟你是不是同一人,是給你數(shù)據(jù),不是對(duì)不起不給,就不給。為什么要這樣做,看門的當(dāng)然是為了安全。
官方解釋: CORS 全稱是跨域資源共享(Cross-Origin Resource Sharing),是一種 ajax 跨域請(qǐng)求資源的方式,支持現(xiàn)代瀏覽器,IE支持10以上。 實(shí)現(xiàn)方式很簡(jiǎn)單,當(dāng)你使用 XMLHttpRequest 發(fā)送請(qǐng)求時(shí),瀏覽器發(fā)現(xiàn)該請(qǐng)求不符合同源策略,會(huì)給該請(qǐng)求加一個(gè)請(qǐng)求頭:Origin,后臺(tái)進(jìn)行一系列處理,如果確定接受請(qǐng)求則在返回結(jié)果中加入一個(gè)響應(yīng)頭:Access-Control-Allow-Origin; 瀏覽器判斷該相應(yīng)頭中是否包含 Origin 的值,如果有則瀏覽器會(huì)處理響應(yīng),我們就可以拿到響應(yīng)數(shù)據(jù),如果不包含瀏覽器直接駁回,這時(shí)我們無(wú)法拿到響應(yīng)數(shù)據(jù)。所以 CORS 的表象是讓你覺(jué)得它與同源的 ajax 請(qǐng)求沒(méi)啥區(qū)別,代碼完全一樣。