Web跨域問題總結

昨天測試一個網頁聯(lián)調問題時發(fā)送請求總是發(fā)送不成功,因為時IE8環(huán)境提示很有限,后來無奈開啟IE調試模式發(fā)現(xiàn)報錯信心時"no Transtport",結合實際環(huán)境想到原來時跨域問題造成的。為此想總結一下Web跨域問題。

一、跨域問題的由來
為了防止某些文檔或腳本加載別的域下的未知內容造成泄露隱私,破壞系統(tǒng)等安全行為,1995年, Netscape 公司在瀏覽器中引入同源策略/SOP(Same origin policy),它是瀏覽器最核心也最基本的安全功能,對Web訪問做了兩種限制:
1、不能通過ajax的方法或其他腳本中的請求去訪問不同源中的文檔。
2、瀏覽器中不同域的框架之間是不能進行js的交互操作的。
引入SOP的初衷是為了Web安全,但實際使用中,正常合理的跨域請求也會遭到限制,由此產生了跨域問題。

二、怎么算跨域(同源的定義)
兩個URL的協(xié)議,域名(主機名、IP)和端口都相同則認為是同源,否則有任一個不同則認為跨域。

Paste_Image.png

IE有例外:授信范圍(Trust Zones):兩個相互之間高度互信的域名,如公司域名(corporate domains),不遵守同源策略的限制。IE未將端口號加入到同源策略的組成部分之中,因此 http://company.com:81/index.htmlhttp://company.com/index.html 屬于同源并且不受任何限制。

三、常見跨域問題解決方
要解決瀏覽器跨域請求問題,必須要服務器端支持,如果服務器本身限制不允許跨域訪問,則無法實現(xiàn)。
1、JSONP

Paste_Image.png

同源策略下,某個服務器是無法獲取到服務器以外的數(shù)據,但是html里面的img,iframe和script等標簽是個例外,這些標簽可以通過src屬性請求到其他服務器上的數(shù)據。
JSONP就是通過script節(jié)點src調用跨域的請求。當我們向服務器提交一個JSONP的請求時,我們給服務傳了一個特殊的參數(shù),告訴服務端要對結果特殊處理一下。這樣服務端返回的數(shù)據就會進行一點包裝,客戶端就可以處理。如下圖:

Paste_Image.png

特點:JSONP跨域方式只需要服務端支持即可,簡單方便,但它只支持GET的方式提交,不支持其他Post的提交,Get方式對請求的參數(shù)長度有限制,在有些情況下可能不滿足要求。

2、CORS

Paste_Image.png

CORS(跨域資源共享,Cross-Origin Resource Sharing)是通過客戶端+服務端協(xié)作聲明的方式來確保請求安全的。服務端會在HTTP請求頭中增加一系列HTTP請求參數(shù)(例如Access-Control-Allow-Origin等),來限制哪些域的請求和哪些請求類型可以接受,而客戶端在發(fā)起請求時必須聲明自己的源(Orgin),否則服務器將不予處理,如果客戶端不作聲明,請求甚至會被瀏覽器直接攔截都到不了服務端。服務端收到HTTP請求后會進行域的比較,只有同域的請求才會處理,并在響應頭中增加允許域信息,瀏覽器檢查響應頭中允許域是否正常,若不正常就限制輸出。
特點:需要瀏覽器客戶端、服務端同時支持,有兼容性問題(IE8就通過XDR只實現(xiàn)了CORS的部分規(guī)范,只支持GET/POST形式的請求。另外只支持 http 和 https )。瀏覽器支持情況如下圖:

Paste_Image.png

注意,跨域請求始終是網頁安全中一個比較頭疼的問題,CORS提供了一種跨域請求方案,但沒有為安全訪問提供足夠的保障機制,如果你需要信息的絕對安全,不要依賴CORS當中的權限制度,應當使用更多其它的措施來保障,比如OAuth2。

3、其它不常用方式
WebSocket、ifream、服務器代理、flash socket。

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

相關閱讀更多精彩內容

  • 歡迎關注微信公眾號:全棧工廠 本文主要參考跨域資源共享 CORS 詳解[http://www.ruanyifeng...
    liqingbiubiu閱讀 2,045評論 0 3
  • 前言:對于跨域請求,很早之前就有去了解過,但因為一直關注的都是服務器后端開發(fā),故也就僅僅停留在概念的理解上而沒有機...
    ken_ljq閱讀 90,211評論 6 128
  • 瀏覽器在請求不同域的資源時,會因為同源策略的影響請求不成功,這就是通常被提到的“跨域問題”。作為前端開發(fā),解決跨域...
    SCQ000閱讀 2,748評論 1 52
  • 一、瀏覽器的同源策略 1.什么是同源? 所謂“同源”指的是”三個相同“。相同的域名、端口和協(xié)議,這三個相同的話就視...
    徐國軍_plus閱讀 924評論 1 3
  • 前言 對于Bug相信對于所有的開發(fā)者而言都是噩夢,沒有一個app是完美的,尤其是android開發(fā)需要適配的版本太...
    Smile__EveryDay閱讀 21,668評論 3 18

友情鏈接更多精彩內容