我如何知道哪些access-control-allow-headers允许CORS?

时间:2015-10-13 11:11:51

标签: http-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

更新this MDN page包含简单标头的概述(默认的CORS安全请求标头):

  

一个简单的标头(或CORS安全的请求标头)就是其中之一   以下HTTP标头:

     
      
  • 接受
  •   
  • 接受语言
  •   
  • 内容的语言
  •   
  • Content-Type,其MIME类型为其解析值(忽略参数)application / x-www-form-urlencoded,multipart / form-data或text / plain。
  •   
     

或其中一个客户端提示标题:

     
      
  • DPR
  •   
  • 下行链路
  •   
  • 保存-数据
  •   
  • 视口宽度
  •   
  • 宽度
  •   

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

Access-Control-Allow-Headers由后端附加,您无法在客户端控制该标头。Access-Control-Allow-Headers应该在响应对象中返回。

因此,要在响应对象的Access-Control-Allow-Headers标头中包含其他标头,您必须配置您的Web服务器或更新后端应用程序,该应用程序为每个请求附加所需的Access-Control-Allow-Headers值。

要允许客户端请求服务器中的任何标头,请为每个响应添加Access-Control-Allow-Origin: *标头。

有很多文章和信息,您可以如何设置CORS以您想要的方式工作。例如,一个 - Enabling CORS