題目1:什么是同源策略?
同源策略,Same-origin policy,瀏覽器處于安全考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒(méi)有明確授權(quán)的情況下,不能讀寫(xiě)對(duì)方的資源。同源策略的目的,是為了保證用戶信息的安全,防止惡意的網(wǎng)站竊取數(shù)據(jù)。
同源必須滿足以下3點(diǎn):
同協(xié)議:常見(jiàn)協(xié)議有http、https、file、ssh、ftp、mailto、tel
同端口號(hào):URL默認(rèn)不寫(xiě)端口,默認(rèn)端口就是80。注意默認(rèn)80端口和8080端口是不同的。
題目2:什么是跨域?跨域有幾種實(shí)現(xiàn)形式
跨域,就是不同域名的接口之間實(shí)現(xiàn)交互,包括傳輸數(shù)據(jù),操作DOM元素等資源。
跨域有四種實(shí)現(xiàn)形式:
- JSONP
- CORS
- 降域
- postMessage
題目3:JSONP 的原理是什么
JSONP 的原理簡(jiǎn)單來(lái)說(shuō)就是html中script標(biāo)簽可以引入其他域下的js。利用這個(gè)特性,可實(shí)現(xiàn)跨域訪問(wèn)接口。
實(shí)現(xiàn)流程如下:
通過(guò)事件觸發(fā),前端實(shí)現(xiàn)新增script元素。srcipt的src為接口路徑。新增script元素的時(shí)候,就會(huì)默認(rèn)執(zhí)行src所指路徑,就會(huì)向后臺(tái)發(fā)起跨域請(qǐng)求。
在前端自定義一個(gè)函數(shù),用于獲取后臺(tái)響應(yīng)返回的數(shù)據(jù)后,對(duì)數(shù)據(jù)進(jìn)行具體操作。
在后端,對(duì)響應(yīng)請(qǐng)求后返回的數(shù)據(jù)進(jìn)行包裝。把響應(yīng)數(shù)據(jù)轉(zhuǎn)化為JSON格式的字符串,然后再加上與前端自定義函數(shù)名稱相同的字符串,然后發(fā)送這個(gè)包裝數(shù)據(jù)給前端。
前端在事件觸發(fā)新增script元素,執(zhí)行src所指接口路徑時(shí),因?yàn)榉祷財(cái)?shù)據(jù)的格式與自定義的函數(shù)相同,就會(huì)執(zhí)行自定義的函數(shù)內(nèi)容,實(shí)現(xiàn)對(duì)數(shù)據(jù)的具體操作。
題目4:CORS是什么
Cross-Origin Resource Sharing,跨域資源共享,是一種ajax跨域請(qǐng)求資源的方法。
在使用AJAX的基礎(chǔ)上,跨域請(qǐng)求時(shí),瀏覽器會(huì)在請(qǐng)求頭Request headers加上“origin:發(fā)起請(qǐng)求的域名”。在后端代碼加上res.header("Accsess-Control-Allow-Origin","*")或res.header("Accsess-Control-Allow-Origin","具體URL域名"),這樣會(huì)讓瀏覽器對(duì)任何域名或這個(gè)指定的域名發(fā)送的請(qǐng)求給予回應(yīng)。