我正在调查跨域问题,我有一些REST服务调用。 Chrome说这个: Access-Control-Allow-Headers 不允许请求标头字段x-requested-with 这就是我从网络获得的 - >标题标签:
Request URL: rest_url_on_other_domain
Request Method:OPTIONS
Status Code:200 OK
Request Headers:
Access-Control-Request-Headers:Origin, x-requested-with, content-type, accept
Access-Control-Request-Method:POST
Origin:http://localhost:8080
Response Headers
Access-Control-Allow-Headers:Content-Type, Accept
Access-Control-Allow-Methods:GET, POST
Access-Control-Allow-Origin:*
Access-Control-Max-Age:1728000
Cache-Control:no-cache, no-store
Connection:keep-alive
Content-Length:0
Date:Fri, 30 Dec 2011 11:29:12 GMT
Expires:-1
Pragma:no-cache
Server:nginx/1.0.2
有人可以解释一下这个HTTP标头吗?问题是什么 - 服务器上的某些标头检查失败或客户端(浏览器)上的某些标头检查失败。这个Access标题的想法是什么?用简单的词语详细解释,只是为了得到我自己学习的其余部分。提前谢谢!
答案 0 :(得分:11)
您所看到的是跨源资源共享预检请求。此类请求的请求方法为OPTIONS
。这是浏览器用于请求发送实际请求的权限的请求。您可以在此处了解详情:http://www.html5rocks.com/en/tutorials/cors/
在这种特殊情况下,浏览器会要求一堆标题(在Access-Control-Request-Headers
标题中)。现在,作为响应,Access-Control-Allow-Headers
标头应包含所有请求的标头。如果有多个请求的标头,浏览器不会抛出任何异常。在此示例中,您的响应标头应如下所示:
Access-Control-Allow-Headers: Origin, x-requested-with, content-type, accept
所有其他响应标头看起来都不错。一旦服务器发送此响应,浏览器将发送第二个请求,这是对数据的实际请求。