CROS跨域請求設定,偏重前端
跨域請求
兩種結果
· 一種 request 會收不到 response,因為 response 被瀏覽器攔截了,內容不告訴你
· 另一種請求會根本發不出去,因為瀏覽器不允許發出那樣的 request
simple 請求跨域
條件
1.
請求方法是以下3種方法
2.
o HEAD
o POST
o GET
3.
HTTP的頭資訊不超出以下幾種欄位
4.
o 只能有瀏覽器預設新增的 headers,以及一些 CORS 協議中默許的 headers 比如 Accept 等,更多被允許的 headers,可以看這裡
o Accept
o Accept-Language
o Content-Language
o Lase-Event-ID
o Content-Type: 只限於三個值application/x-www-form-urlencoded、multipart/form-data、text/plain
注:
一旦一個 request 是 simple request,那麼,儘管這個請求是跨域的,它也會被瀏覽器直接放行。但是,在 response 返回的時候,瀏覽器並不會把 response 直接交給你,而是去檢查這個 response 的 headers 中有沒有 Access-Control-Allow-Origin,以及這個 header 的 value 包含 request 發出的地址(也就是“域”)。如果兩個條件都滿足, response 會被返回給發出請求的程式;如果沒有這個 header 或者 value 不對, response 就會被攔截下來,因為在瀏覽器看來,這個 response 不屬於你(因為伺服器沒有明確允許你這個“域”來請求它)。如果你使用的是 chrome 瀏覽器,在 response 被攔截下來的時候,console 中會顯示一個錯誤。
preflight 請求跨域
1. 不是 GET,HEAD,POST 請求;比如是 PUT 請求
2. 包含一些非 CORS 協議默許的 headers,比如Authorization,X-Request-With 或者一些自定義的headers。
3.
Content-Type 不是默許的那 3 種
註釋:
4. 瀏覽器傳送 preflight request(那個 OPTIONS 請求[2])
5. 瀏覽器收到 preflight response(也就是剛剛那個 request 的返回)
6. 瀏覽器根據 preflight response 中的 Access-Control-Allow-Origin, Access-Control-Allow-Headers以及其他Access-Control-*類的headers 中的 value 來判斷網頁程式真正要發出的 request 是否符合要求
7.
如果這個 request 符合要求,request 被髮出,網頁程式可以收到正常的 response(如果不出網路通訊上的意外);如果這個 request 被判定為不符合要求,這個 request 乾脆就不會被髮出。
以上這些步驟都是同步的,preflight request 和 真正的request 是有先後順序的
8.
跨域時帶身資訊(Access-Control-Allow-Credentials)
9.
伺服器允許客戶端表明身份
10.
1. 將Access-Control-Allow-Credentials設定為true
三種預設的表明身份的方式是:
1. Cookie: 在 request 的 header 中 Cookie 這一項
2. Authorization: 在 request 的 header 中 Authorization 這一項
3. 使用了 TLS 證書
讓客戶端瀏覽器自動帶上身份資訊
在進行跨域請求時,瀏覽器預設不會帶上 cookie(這個 cookie 是針對目標域的 cookie,而不是原來“域”的 cookie),但是如果在構建 xhr 物件時,把XMLHttpRequest.withCredentials這個屬性設為 true,瀏覽器會自動幫你帶上目標域的cookie
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009011/viewspace-2839589/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 跨域請求跨域
- 前端http請求跨域問題解決前端HTTP跨域
- vue跨域請求Vue跨域
- CORS跨域請求CORS跨域
- .net webapi 處理前端請求跨域問題WebAPI前端跨域
- CROS 解決跨域問題ROS跨域
- 允許跨域請求跨域
- vue axios 請求跨域VueiOS跨域
- phpstudy中apache設定跨域(頭部請求模組開啟)PHPApache跨域
- Vue——介面請求支援跨域Vue跨域
- 同源政策與跨域請求跨域
- Cross-origin 跨域請求ROS跨域
- 跨域請求後端配置跨域後端
- php 支援jsonp跨域請求PHPJSON跨域
- NGINX如何配置跨域請求Nginx跨域
- IE9 跨域請求相容IE9跨域
- 跨域之OPTION請求【轉載】跨域
- web 跨域請求安全問題Web跨域
- 跨域是什麼?跨域請求資源有哪些方法?跨域
- Ajax+SpringMVC實現跨域請求SpringMVC跨域
- 使用cors完成跨域請求處理CORS跨域
- 如何使flask允許跨域請求Flask跨域
- SpringBoot解決跨域請求攔截Spring Boot跨域
- 13、HttpClient伺服器跨域請求HTTPclient伺服器跨域
- ajax跨域請求之CORS的使用跨域CORS
- options 請求跨域問題處理跨域
- php跨域設定PHP跨域
- 跨域請求cookie資源共享詳解跨域Cookie
- CORS跨域限制以及預請求驗證CORS跨域
- Ajax 跨域請求 Access to XMLHttpRequest 解決方案跨域XMLHTTP
- 簡單的實現jsonp跨域請求JSON跨域
- js ajax請求封裝及解決node請求跨域問題JS封裝跨域
- 搞定所有的跨域請求問題: jsonp & CORS跨域JSONCORS
- React 解決fetch跨域請求時session失效React跨域Session
- Python全棧Web(AjaxJQuery-AJAX跨域請求)Python全棧WebjQuery跨域
- springboot系列文章之實現跨域請求(CORS)Spring Boot跨域CORS
- java解決請求跨域的兩種方法Java跨域
- 跨域請求中常見的幾個問題跨域