1. 程式人生 > >CORS跨域請求總結

CORS跨域請求總結

eve log 那種 http lencod pos 方法 ref orm

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

CORS跨域請求總結