題目1: 什么是同源策略
瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權(quán)的情況下,不能讀寫對方的資源。
題目2: 什么是跨域?跨域有幾種實現(xiàn)形式
跨域指A網(wǎng)頁請求B網(wǎng)頁的資源,只要A網(wǎng)頁和B網(wǎng)頁的協(xié)議、端口、域名其中任何一個不同,都算跨域。
| url | 說明 | 是否允許通信 |
|---|---|---|
|
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 |
域名和域名對應ip | 不允許 |
跨域主要實現(xiàn)方式:
JSONP、CORS、降域、PostMessage
題目3: JSONP 的原理是什么
html中的script標簽可以引入其他域下的js,利用這個特性可以實現(xiàn)跨域訪問接口,需要后端支持
1 定義數(shù)據(jù)處理函數(shù)_fun
2 創(chuàng)建script標簽,src的地址執(zhí)行后端接口,最后個參數(shù)加上callback=_fun
3 服務器端在收到請求后,解析參數(shù),計算返回數(shù)據(jù),輸出 _fun(data)字符串
4 fun(data)會放到script標簽作為js執(zhí)行,此時調(diào)用fun函數(shù),將data作為參數(shù)
題目4: CORS是什么
CORS全稱是跨域資源共享(Cross-origin resource sharing),是一種ajax跨域請求資源的方式,支持現(xiàn)代瀏覽器,IE支持10以上,實現(xiàn)方式很簡單,當你使用XMLHttpRequest發(fā)送請求時,瀏覽器發(fā)現(xiàn)該請求 不符合同源策略,會給該請求加一個請求頭:Origin,后臺進行一系列處理,如果確定接受請求則在返回結(jié)果中加一個響應頭:Access-Control-Allow-Origin;瀏覽器判斷該相應頭中是否包含Origin的值,如果有,瀏覽器就會處理響應,我們就可以拿到響應數(shù)據(jù),如果不包含瀏覽器直接駁回,這是我們無法拿到響應數(shù)據(jù),所以CORS的表象是讓你覺得它與同源的ajax請求沒區(qū)別,代碼完全一樣。