鉴于这些请求标题:
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
)
更新:this MDN page包含简单标头的概述(默认的CORS安全请求标头):
一个简单的标头(或CORS安全的请求标头)就是其中之一 以下HTTP标头:
- 接受
- 接受语言
- 内容的语言
- Content-Type,其MIME类型为其解析值(忽略参数)application / x-www-form-urlencoded,multipart / form-data或text / plain。
或其中一个客户端提示标题:
- DPR
- 下行链路
- 保存-数据
- 视口宽度
- 宽度
答案 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