具有相同協議,網域名稱和埠的頁面,則具有相同的源,即它們是來自同乙個服務的資源.
如,對"進行
同源檢測:
url結果原因
成功成功
失敗不同協議 ( https和http )
失敗不同埠 ( 81和80)
失敗不同網域名稱 ( news和store )
注:1、埠和協議的不同,只能通過後台來解決
2、網域名稱和實際ip位址屬於跨域,如:localhost和127.0.0.1雖然都指向本機,但也屬於跨域
瀏覽器的同源策略限制了從同乙個源載入的資源 (文件或指令碼等) 如何與來自另乙個源的資源進行互動,它是乙個用於隔離潛在惡意檔案的重要安全機制。
同源策略控制了不同源之間的互動,當瀏覽器從乙個源的網頁去請求另乙個源的資源時,即瀏覽器在做跨服務的資源訪問時,就會出現跨域問題.
注:1、同源策略及跨域問題只是瀏覽器設計的一種安全機制,對於其他工具如 curl 則完全沒有同源及跨域的概念
2、瀏覽器在跨域請求資源時,實際的請求會被傳送到被請求的服務端,響應也會被接收,只是如果不做跨域處理時,返回的響應不會被瀏覽器解析,同時瀏覽器會丟擲跨域受限的錯誤
若在來自"源a (的乙個頁面中要訪問"源b (中的資源,則"源b"可以通過修改其 response 中 header 的 "access-control-allow-origin"欄位來允許來自"源a"的跨域請求.瀏覽器檢測到"access-control-allow-origin"字段,則會根據結果對響應做解析.
access-control-allow-origin : * 表示源b接收來自其它任何源的跨域請求
access-control-allow-origin : 源a (如: 表示源b只接收來自源a的跨域請求
cors的預請求
在跨域時,並不是所用的方法都會被允許,對於非預設允許方法,需要經過近一步驗證後才會得到跨域允許,這就涉及到cors的預請求.
在跨域時預設允許的method:cors預請求 (prefligt請求) 就是瀏覽器在在發生請求時,會預先自動發出乙個在跨域時預設允許的content-type:
跨域時其它的限制:
options
請求來檢測本次請求中涉及到的一些內容(如method, content-type 等)是否被伺服器接受。乙個options請求一般會攜帶下面兩個與跨域相關相關的頭:
access-control-request-method
: 本次預請求的請求方法。
access-control-request-headers
:本次請求所攜帶的自定義首部字段
access-control-allow-origin
: 伺服器允許的跨域請求源
access-control-allow-methods
: 伺服器允許的請求方法
access-control-allow-headers
: 伺服器允許的自定義的請求首部字段
通過預請求後,瀏覽器就會發生正式的資料請求。整個請求過程其實是發生了兩次請求:乙個預請求,以及預請求通過後的實際資料請求。
在上面的兩次請求中,預檢請求只是乙個檢查的過程,它不會攜帶任何請求的引數;預檢通過後的請求才會真正的攜帶請求引數與伺服器進行資料通訊。
若伺服器對預請求沒有任何響應,那麼瀏覽器不知道伺服器是否支援跨域訪問,就而不會傳送後續的實際請求;或者伺服器不支援當前的origin跨域訪問也不會傳送後續請求。
jsonp(json with padding:填充式json),應用json的一種新方法,
json、jsonp的區別:
1、json返回的是一串資料、jsonp返回的是指令碼**(包含乙個函式呼叫)
2、jsonp 只支援get請求、不支援post請求
jsonp的原理很簡單,就是動態的創造script標籤,然後利用script的src 不受同源策略約束來跨域獲取資料。(link,script,image標籤不受瀏覽器的同源策略約束)
參考:cors預檢請求詳談
什麼是跨域?如何解決跨域問題?
不要再問我跨域的問題了
HTTP訪問控制(跨域問題)
跨域資源共享 cors 使用額外的 http 頭來告訴瀏覽器,讓執行在乙個origin域上的web應用被准許訪問來自不同源伺服器上的指定的資源 瀏覽器本地快取也會受到跨域限制 跨域指不同的網域名稱,協議或埠 整個cors通訊過程,都是瀏覽器自動完成,不需要使用者參與 如果請求的origin的值不在指...
通過cors協議解決跨域問題
跨域 瀏覽器從乙個網域名稱的網頁去請求另乙個網域名稱的資源時,網域名稱 埠 協議任一不同,都是跨域 cors協議 h5中的新特性 cross origin resource sharing 跨域資源共享 通過它,我們的開發者 主要指後端開發者 可以決定資源是否能被跨域訪問。cors是乙個w3c標準,...
HTTP之跨域請求
http協議本身是沒有跨域請求的設定的,跨域請求的限制是瀏覽器為了安全考慮加上去的。實際上,瀏覽器對於http請求是直接傳送給server 瀏覽器提供了2種方式來突破跨域請求的限制,在sever返回的response head中新增access control allow origin 瀏覽器不限制...