CORS(跨域資源共享)理論篇

原文鏈接:http://www.dubby.cn/detail.html?id=9065

CORS:Cross-Origin Resource Sharing (跨域資源共享)

HTTP 響應首部字段

Access-Control-Allow-Origin

響應首部中可以攜帶一個 Access-Control-Allow-Origin 字段,其語法如下:

Access-Control-Allow-Origin: <origin> | *

其中,origin 參數的值指定了允許訪問該資源的外域 URI。對於不需要攜帶身份憑證的請求,服務器可以指定該字段的值爲通配符,表示允許來自所有域的請求。

例如,下面的字段值將允許來自 http://www.dubby.cn 的請求:

Access-Control-Allow-Origin: http://www.dubby.cn

如果服務端指定了具體的域名而非“*”,那麼響應首部中的 Vary 字段的值必須包含 Origin。這將告訴客戶端:服務器對不同的源站返回不同的內容。

Access-Control-Expose-Headers

在跨域訪問時,XMLHttpRequest對象的getResponseHeader()方法只能拿到一些最基本的響應頭,Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma,如果要訪問其他頭,則需要服務器設置本響應頭。

Access-Control-Expose-Headers 頭讓服務器把允許瀏覽器訪問的頭放入白名單,例如:

Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header

這樣瀏覽器就能夠通過getResponseHeader訪問X-My-Custom-Header和 X-Another-Custom-Header 響應頭了。

Access-Control-Max-Age

Access-Control-Max-Age 頭指定了preflight請求的結果能夠被緩存多久,請參考本文在前面提到的preflight例子。

Access-Control-Max-Age: <delta-seconds>

delta-seconds 參數表示preflight請求的結果在多少秒內有效。

Access-Control-Allow-Credentials

Access-Control-Allow-Credentials 頭指定了當瀏覽器的credentials設置爲true時是否允許瀏覽器讀取response的內容。當用在對preflight預檢測請求的響應中時,它指定了實際的請求是否可以使用credentials。請注意:簡單 GET 請求不會被預檢;如果對此類請求的響應中不包含該字段,這個響應將被忽略掉,並且瀏覽器也不會將相應內容返回給網頁。

Access-Control-Allow-Credentials: true

也就是如果不設置這個,那麼帶cookie的請求是可以發給服務端的,但是瀏覽器也不會將相應內容返回給網頁。

Access-Control-Allow-Methods

Access-Control-Allow-Methods 首部字段用於預檢請求的響應。其指明瞭實際請求所允許使用的 HTTP 方法。

Access-Control-Allow-Methods: <method>[, <method>]*

Access-Control-Allow-Headers

Access-Control-Allow-Headers 首部字段用於預檢請求的響應。其指明瞭實際請求中允許攜帶的首部字段。

Access-Control-Allow-Headers: <field-name>[, <field-name>]*

HTTP 請求首部字段

Origin

Origin 首部字段表明預檢請求或實際請求的源站。

Origin: <origin>

origin 參數的值爲源站 URI。它不包含任何路徑信息,只是服務器名稱。

注意,不管是否爲跨域請求,ORIGIN 字段總是被髮送。

Access-Control-Request-Method

Access-Control-Request-Method 首部字段用於預檢請求。其作用是,將實際請求所使用的 HTTP 方法告訴服務器。

Access-Control-Request-Method: <method>

Access-Control-Request-Headers

Access-Control-Request-Headers 首部字段用於預檢請求。其作用是,將實際請求所攜帶的首部字段告訴服務器。

Access-Control-Request-Headers: <field-name>[, <field-name>]*
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章