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

Bla*_*ise 11 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
Run Code Online (Sandbox Code Playgroud)

这些响应头:

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: *
Run Code Online (Sandbox Code Playgroud)

即使只明确允许AuthorizationContent-Type标头,这也可以工作.为什么我不允许我的浏览器发送其他标头?(DNT例如)


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

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

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

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

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

irn*_*nmn 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';
Run Code Online (Sandbox Code Playgroud)

有一组普通标题,然后是你必须明确调用的标题集.请参阅http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server,了解如何在服务器上进行设置.