2012-07-20 72 views
2

尝试执行XHR请求时出现以下错误。我已经设置了CORS响应标题,但显然有些问题。任何人都可以发现错误?尽管设置了标头,但仍不允许CORS请求

XMLHttpRequest无法加载http://domain.dev/path。 Access-Control-Allow-Origin不允许原产地http://mobile.dev

预检请求标题(OPTIONS)

这是一个飞行前请求,来验证所述请求。

Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:origin, x-pre-process, x-requested-with, x-client, x-client-version, accept, x-session 
Access-Control-Request-Method:GET 
Cache-Control:max-age=0 
Connection:keep-alive 
Host:my-app.dev 
Origin:http://mobile.dev 
Pragma:no-cache 
Referer:http://mobile.dev/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1211.0 Safari/537.2 

响应头

这是服务器响应于飞行前请求。

Access-Control-Allow-Headers:origin, x-pre-process, x-requested-with, x-client, x-client-version, accept, x-session 
Access-Control-Allow-Methods:GET, POST, PUT, PATCH, DELETE 
Access-Control-Allow-Origin:http://mobile.dev 
Access-Control-Max-Age:3600 
Cache-Control:max-age=0, private, must-revalidate 
Connection:close 
Content-Type:text/html; charset=utf-8 
ETag:"7215ee9c7d9dc229d2921a40e899ec5f" 
X-Request-Id:3fca5f24077bcbd1351d552edf311f82 
X-Runtime:0.014551 

真实请求头

这才是真正的请求,这是由浏览器由于上面引述的错误而被取消。

Accept:application/json, text/javascript, */*; q=0.01 
Cache-Control:no-cache 
Origin:http://mobile.dev 
Pragma:no-cache 
Referer:http://mobile.dev/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1211.0 Safari/537.2 
X-Client:mobile 
X-Client-Version:1.6 
X-Pre-Process:underscore 
X-Requested-With:XMLHttpRequest 
X-Session:j9y01yw33txmdbcz1ao258uy7bzjlm 

回答

1

似乎正确处理飞行前OPTIONS请求是必要的,但不足以使跨站点资源请求正常工作。

在OPTIONS请求返回满意的标题后,对任何对相同URL的后续请求的所有响应也必须具有必需的“Access-Control-Allow-Origin”标头,否则浏览器将吞下它们,并且它们甚至不会显示在调试器窗口中。

所以它看起来就像浏览器取消,因为在OPTIONS响应一些问题的要求,但实际上,浏览器正在考虑从实际请求的响应报头,然后拒绝他们。

(从我自己的同类问题Access-Control-Allow-Origin header not working - What am I doing wrong?复制而来,以防万一它是一回事)