瀏覽器多管閑事之跨域
年少時的夢想就是買一臺小霸王游戲機
當時的宣傳語就是小霸王其樂無窮~。
大些了,攢夠了零花錢,在家長的帶領(lǐng)下終于買到了
那一刻我感覺就是最幸福的人
風都是甜的!
哪成想...
剛到家就被家長扣下了
“”禁止未成年人玩游戲機
(問過賣家了,賣家給的結(jié)論)...,
合著買是能買,玩是不能玩的!
不讓我玩啊,我這個氣呀...

蹩扯了~
生活中的事跟跨域有什么關(guān)系,那必須有。
跨域的產(chǎn)生是瀏覽器的安全機制引起的,只有在使用Ajax時才會發(fā)生。簡單來說就是你可以通過ajax發(fā)送請求,但要看遠程服務(wù)器臉色,他沒授權(quán),瀏覽器這個老六就給攔截了,不能用這個結(jié)果,像極了游戲機讓買不讓玩。
什么是跨域
跨域(Cross-Origin)指的是在 Web 開發(fā)中,一個網(wǎng)頁的運行環(huán)境(域)與所請求資源的域不一致,即請求的目標資源與當前網(wǎng)頁的域名(協(xié)議、域名或端口)不同。
Web 瀏覽器遵循同源策略(Same-Origin Policy),這是一種安全策略,旨在防止?jié)撛诘膼阂饩W(wǎng)站竊取用戶數(shù)據(jù)或進行其他安全攻擊。同源策略要求網(wǎng)頁的運行環(huán)境和所請求的資源必須擁有相同的協(xié)議、域名和端口,否則瀏覽器會阻止跨域請求的執(zhí)行。
舉例來說,每個網(wǎng)站都有一個域名或者IP地址(實際上域名就是對IP地址的別名,方便人們記憶)。當我們訪問一個網(wǎng)站時,瀏覽器會將某個頁面下載到本地并解析,以展示圖形頁面。為了支持更多的業(yè)務(wù)需求,在這個頁面中可能會發(fā)起一些額外的請求。為了避免頁面卡頓,我們使用了Ajax技術(shù)偷偷地通過后門請求數(shù)據(jù)。偷偷走后門是可行的,但是必須遵循規(guī)則,不可以隨意發(fā)起請求。
假設(shè)當前頁面是www.qfedu.com,在這個頁面中發(fā)送了一個Ajax請求。瀏覽器允許請求發(fā)送出去,但是請求的地址不是本身的地址,而是www.1000phone.com/api/xxxx這樣的地址。此時,瀏覽器會檢查響應(yīng),并查看服務(wù)端是否允許任何來源發(fā)起請求。如果服務(wù)端允許,瀏覽器將放行請求。否則,瀏覽器會報錯,這種錯誤就是跨域問題。
來吧,看圖

綠色都是可以通行的,紅色是跨域概念的關(guān)鍵點
如何處理跨域
常用的解決跨域方案有3種,分別是jsonp、cors、proxy
????● JSONP(JSON with Padding):核心思想是瀏覽器只限制ajax,不限制圖片、多媒體、css、js等資源訪問其他網(wǎng)站,恰好利用這個特性,使用一些技巧來解決跨域。
JSONP 是一種利用<script>標簽進行跨域請求的技術(shù)。通過在頁面中動態(tài)創(chuàng)建<script>標簽,請求遠程服務(wù)器資源,并在服務(wù)器響應(yīng)中返回一個包裹在函數(shù)調(diào)用中的 JSON 數(shù)據(jù),從而繞過同源策略的限制。JSONP 適用于在受控的環(huán)境中,服務(wù)器端需要配合返回 JSONP 格式的數(shù)據(jù)。
有局限性,需要回調(diào)函數(shù) +別人服務(wù)端配合
????● CORS(跨域資源共享):核心思想就是讓服務(wù)器不對任何訪問者做限制,在響應(yīng)頭中添加一些語句,瀏覽器就放行了,就像游戲機賣家跟家長說多大都可以玩,家長也就不會沒收了。
????CORS 是一種標準的跨域解決方案,由服務(wù)器端進行配置。服務(wù)器通過設(shè)置響應(yīng)頭來指示允許特定域的請求訪問資源,瀏覽器在接收到響應(yīng)頭后判斷是否允許跨域請求。CORS 支持簡單請求和預(yù)檢請求,是一種較為安全和靈活的跨域解決方案。
node.js類型的服務(wù)器代碼設(shè)置如下:
有局限性,需要服務(wù)端配合,別人服務(wù)端安全性降低
●?代理服務(wù)器(Proxy):核心思想是指揮家長玩游戲機。。。
代理服務(wù)器是一種通過后端服務(wù)器轉(zhuǎn)發(fā)請求的方法。前端應(yīng)用將跨域請求發(fā)送給同源服務(wù)器,然后同源服務(wù)器再向目標服務(wù)器發(fā)送請求,并將響應(yīng)返回給前端。這樣前端應(yīng)用就繞過了跨域問題,因為請求是同源的。代理服務(wù)器是一種有效的跨域解決方案,特別適用于無法修改目標服務(wù)器響應(yīng)頭的情況。
這個是比較好的解決方案
總結(jié)
我們應(yīng)該多勸勸瀏覽器,少管點閑事
- End -