題目1: 什么是同源策略
瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒(méi)有明確授權(quán)的情況下,不能讀寫(xiě)對(duì)方的資源。
題目2: 什么是跨域?跨域有幾種實(shí)現(xiàn)形式
跨域指A網(wǎng)頁(yè)請(qǐng)求B網(wǎng)頁(yè)的資源,只要A網(wǎng)頁(yè)和B網(wǎng)頁(yè)的協(xié)議、端口、域名其中任何一個(gè)不同,都算跨域。
| url | 說(shuō)明 | 是否允許通信 |
|---|---|---|
|
http://www.a.com/a.js http://www.a.com/b.js |
相同協(xié)議,同一域名 | 允許 |
|
https://www.a.com/a.js http://www.a.com/a.js |
不同協(xié)議,同一域名 | 不允許 |
|
http://www.a.com/a.js http://www.b.com/a.js |
相同協(xié)議,不同域名 | 不允許 |
|
http://js.a.com/a.js http://www.b.com/a.js |
相同協(xié)議,不同域名 | 不允許 |
|
http://www.a.com:8080/a.js http://www.a.com/b.js |
主域相同,子域不同 | 不允許 |
|
http://www.a.com/a.js http://70.23.92.75/a.js |
域名和域名對(duì)應(yīng)ip | 不允許 |
跨域主要實(shí)現(xiàn)方式:
JSONP、CORS、降域、PostMessage
題目3: JSONP 的原理是什么
html中的script標(biāo)簽可以引入其他域下的js,利用這個(gè)特性可以實(shí)現(xiàn)跨域訪問(wèn)接口,需要后端支持
1 定義數(shù)據(jù)處理函數(shù)_fun
2 創(chuàng)建script標(biāo)簽,src的地址執(zhí)行后端接口,最后個(gè)參數(shù)加上callback=_fun
3 服務(wù)器端在收到請(qǐng)求后,解析參數(shù),計(jì)算返回?cái)?shù)據(jù),輸出 _fun(data)字符串
4 fun(data)會(huì)放到script標(biāo)簽作為js執(zhí)行,此時(shí)調(diào)用fun函數(shù),將data作為參數(shù)
題目4: CORS是什么
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ù),如果不包含瀏覽器直接駁回,這是我們無(wú)法拿到響應(yīng)數(shù)據(jù),所以CORS的表象是讓你覺(jué)得它與同源的ajax請(qǐng)求沒(méi)區(qū)別,代碼完全一樣。