關(guān)于跨域的問(wèn)題

一、在前端開(kāi)發(fā)過(guò)程中,如果準(zhǔn)備開(kāi)發(fā)富應(yīng)用,跨域的問(wèn)題將會(huì)隨之而來(lái)。

????????我們先看看什么是跨域呢:

????????所謂跨域,或者異源,是指主機(jī)名(域名)、協(xié)議、端口號(hào)只要有其一不同,就為不同的域(或源)。出于保護(hù)用戶數(shù)據(jù)的目的,瀏覽器有一個(gè)最基本的策略就是同源策略,只允許頁(yè)面內(nèi)的腳本訪問(wèn)當(dāng)前域的資源(加載腳本、資源等不受此限制)。

二、如果瀏覽器廠商不對(duì)跨域請(qǐng)求進(jìn)行處理,會(huì)給我們帶來(lái)什么危害呢?

? ? ? ? 有心人士(病毒制造者)會(huì)利用這個(gè)漏洞進(jìn)行如下攻擊:

? ? ? ? 1. CSRF/XSRF 攻擊,簡(jiǎn)單的來(lái)講就是在 b.com 頁(yè)面中請(qǐng)求 a.com 的接口(瀏覽器會(huì)自動(dòng)帶上 用戶在 a.com 的 cookie),從而獲取用戶的在 a.com 的相關(guān)信息。

? ? ? ? 2. XSS 注入攻擊,類似于 SQL 攻擊,提交含有惡意腳本的數(shù)據(jù)到服務(wù)器,從而達(dá)到破壞頁(yè)面或者獲取用戶的 cookie。

三、我們了解到了什么是跨域,那我們又應(yīng)該如何解決呢,現(xiàn)在找到了這些比較權(quán)威的文章,大家先品讀一下:

????????1. mozilla 官方網(wǎng)站關(guān)于跨域的文章(Cross Origin),HTTP訪問(wèn)控制(CORS)

????????2. mozilla 官方網(wǎng)站關(guān)于瀏覽器同源策略的簡(jiǎn)要介紹(Same Origin),?瀏覽器的同源策略

四、讀完這些文章,你打算怎么處理跨域問(wèn)題呢,我先談?wù)勛约宏P(guān)于跨域的解決方案:

????????1. 采用 CORS 協(xié)議,直接在 Nginx 中設(shè)置允許跨域的 header(也可以在后端的應(yīng)用程序內(nèi)設(shè)置,不過(guò)在 Nginx 入口配置的話更加統(tǒng)一),在 location 配置中直接使用指令 add_header(官方文檔鏈接 ),示例配置如下:

location /? {

? ??proxy_pass http://backend-url;

? ??add_header Access-Control-Allow-Origin *;

????add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

????add_header Access-Control-Max-Age 86400;

}

????????2. 使用 JSONP,也是需要后端配合,利用“瀏覽器加載腳本、資源時(shí)不受同源策略的約束”這個(gè)特性,但是這種方式非常受限制,例如只能使用 GET 請(qǐng)求,不能攜帶自定義 header 等。

? ? ? ? 3. 其他的一些方法,例如 window.name, document.domain 以及 HTML5 中的特性 window.postMessage 等

五、其他參考鏈接

? ? ? ? 1.?淺談JS跨域問(wèn)題

? ? ? ? 2. 跨域資源共享 CORS 詳解----阮一峰

六、聲明

? ? ? ? 現(xiàn)在網(wǎng)絡(luò)上的知識(shí)非常復(fù)雜,有些是摘自權(quán)威書籍的,有些是作者自己理解然后記錄下來(lái)的,有些是瞎掰的,所以一定要結(jié)合情況多多甄別,對(duì)于有權(quán)威文檔的知識(shí)點(diǎn),建議先參考文檔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容