2015-10-13 15 views
9

鑑於這些請求頭:我如何知道哪些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: * 

這個工程即使只有AuthorizationContent-Type頭被明確允許。爲什麼我不必允許瀏覽器發送其他標題? (像DNT例如)


更新:包含簡單標頭的概要(默認CORS-safelisted請求頭):

一個簡單的報頭(或CORS-safelisted請求頭)是 下列HTTP標頭中的一個:

  • 接受
  • 接受語言
  • 內容語言
  • 內容類型與MIME類型其解析值的任一應用程序/ X WWW的窗體-urlencoded,多部分/格式數據,或文本/無格式的(忽略參數) 。

或者這些客戶暗示一個標題:

  • DPR
  • 下行
  • 保存,數據
  • 視口寬度
  • 寬度
+1

您沒有列出實際的HTTP動詞,但該請求看起來像預檢請求。你有一行看起來像'if($ request_method ='OPTIONS'){'在你的nginx配置中嗎?有關CORS預檢的更多信息,請訪問:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests – morloch

+1

正如@morloch所述,在預檢請求中,您要求獲得發送特定標頭的權限。所以直到你進行實際操作時,你都不知道他們是否被接受。還有一些明確允許的標題(http://www.w3.org/TR/cors/#simple-header)。 –

回答

6

如果沒有看到您的代碼來生成標頭,或者您在哪個系統上服務,即nginx或apache,我可以做的最好的方法是參考http://client.cors-api.appspot.com/client,這將允許您測試您的cors請求。另外,您應該查看http://enable-cors.org/server.html以瞭解您的特定設置。例如關於nginx的,你可能有這樣的事情

add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; 

有一組正常的頭,然後設置您必須顯式調用了頭。請參閱http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server關於在服務器上設置它。

0

Access-Control-Allow-Headers通過後端連接,您無法控制客戶端上的該標頭。 Access-Control-Allow-Headers應該返回響應對象。

所以包括其他標題變爲Access-Control-Allow-Headers頭響應對象 - 你必須配置供應請求的Access-Control-Allow-Headers所需值附加到每個請求您的Web服務器或更新後端應用。

若要允許客戶端請求服務器中的任何標頭應將Access-Control-Allow-Origin: *標頭添加到每個響應。

有很多關於如何設置CORS以您想要的方式工作的文章和信息。例如那一個 - Enabling CORS

相關問題