鑑於這些請求頭:我如何知道哪些access-control-allow-headers允許CORS?
Host: api.example.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:41.0) Gecko/20100101 Firefox/41.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Origin: https://web.example.org
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
而且這些響應頭:
Connection: keep-alive
Content-Length: 0
Content-Type: text/plain; charset=utf-8
Date: Tue, 13 Oct 2015 10:57:34 GMT
Server: nginx/1.8.0
access-control-allow-headers: Authorization, Content-Type
access-control-allow-methods: PUT, DELETE, PATCH
access-control-allow-origin: *
這個工程即使只有Authorization
和Content-Type
頭被明確允許。爲什麼我不必允許瀏覽器發送其他標題? (像DNT
例如)
更新:包含簡單標頭的概要(默認CORS-safelisted請求頭):
一個簡單的報頭(或CORS-safelisted請求頭)是 下列HTTP標頭中的一個:
- 接受
- 接受語言
- 內容語言
- 內容類型與MIME類型其解析值的任一應用程序/ X WWW的窗體-urlencoded,多部分/格式數據,或文本/無格式的(忽略參數) 。
或者這些客戶暗示一個標題:
- DPR
- 下行
- 保存,數據
- 視口寬度
- 寬度
您沒有列出實際的HTTP動詞,但該請求看起來像預檢請求。你有一行看起來像'if($ request_method ='OPTIONS'){'在你的nginx配置中嗎?有關CORS預檢的更多信息,請訪問:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests – morloch
正如@morloch所述,在預檢請求中,您要求獲得發送特定標頭的權限。所以直到你進行實際操作時,你都不知道他們是否被接受。還有一些明確允許的標題(http://www.w3.org/TR/cors/#simple-header)。 –