CORS跨域請求總結

看風景就發表於2017-08-15

CORS跨域請求分為簡單請求和複雜請求。

1. 簡單請求:

滿足一下兩個條件的請求。

(1) 請求方法是以下三種方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的頭資訊不超出以下幾種欄位:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限於三個值application/x-www-form-urlencodedmultipart/form-datatext/plain

2. 複雜請求:

非簡單請求就是複雜請求。

非簡單請求是那種對伺服器有特殊要求的請求,比如請求方法是PUTDELETE,或者Content-Type欄位的型別是application/json

非簡單請求的CORS請求,會在正式通訊之前,增加一次HTTP查詢請求,稱為"預檢"請求(preflight)。

預檢請求為OPTIONS請求,用於向伺服器請求許可權資訊的。

預檢請求被成功響應後,才會發出真實請求,攜帶真實資料。

3. CORS與cookies:

上面說到,CORS請求預設不傳送Cookie和HTTP認證資訊。如果要把Cookie發到伺服器,一方面要伺服器同意,指定Access-Control-Allow-Credentials欄位。


Access-Control-Allow-Credentials: true

另一方面,開發者必須在AJAX請求中開啟withCredentials屬性。


var xhr = new XMLHttpRequest();
xhr.withCredentials = true;//XMLHttpRequest level2才有withCredentials屬性

4. 減少預檢請求次數

服務端設定Access-Control-Max-Age可以將預檢請求進行客戶端快取,減少請求次數

 

具體可以參考:http://www.ruanyifeng.com/blog/2016/04/cors.html

相關文章