題目1: 什么是同源策略
- 概念:瀏覽器出于安全方面的考慮商乎,只允許與本域下的接口交互。不同源的客戶端腳本在沒(méi)有明確授權(quán)的情況下,不能讀寫對(duì)方的資源早歇。
-
本域指的是:
- 同協(xié)議:如都是http或者h(yuǎn)ttps
- 同域名:如都是http://jirengu.com/a 和http://jirengu.com/b
- 同端口:如都是80端口
題目2: 什么是跨域焰檩?跨域有幾種實(shí)現(xiàn)形式
-
跨域就是不同源憔涉。不同源的例子:
- http://jirengu.com/main.js 和 https://jirengu.com/a.php (協(xié)議不同)
- http://jirengu.com/main.js 和 http://bbs.jirengu.com/a.php (域名不同,域名必須完全相同才可以)
- http://jiengu.com/main.js 和 http://jirengu.com:8080/a.php (端口不同,第一個(gè)是80)
-
實(shí)現(xiàn)形式
- JSONP
- CORS
- 降域
- postMessage
題目3: JSONP 的原理是什么
- 原理:
html中script標(biāo)簽可以引入其他域下的js锅尘,比如引入線上的jquery庫(kù)监氢。利用這個(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ì)算返還數(shù)據(jù),輸出 fun(data) 字符串璧榄。
4.fun(data)會(huì)放到script標(biāo)簽做為js執(zhí)行特漩。此時(shí)會(huì)調(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ù),如果不包含瀏覽器直接駁回炒嘲,這時(shí)我們無(wú)法拿到響應(yīng)數(shù)據(jù)宇姚。所以 CORS 的表象是讓你覺(jué)得它與同源的 ajax 請(qǐng)求沒(méi)啥區(qū)別,代碼完全一樣摸吠。