使用正确的标头和OPTIONS请求,仍然会收到“请求的资源上没有Access-Control-Allow-Origin标头”

时间:2013-11-27 16:38:33

标签: javascript ajax cross-domain cross-domain-policy

所以我正在尝试使用javascript创建跨域AJAX请求。

我的OPTIONS请求正在执行而没有任何问题,我回来了 Access-Control-Allow-Origin:*作为回复标题。但是,在尝试发出后续POST请求时,我收到以下错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://phoenix-client.local' is therefore not allowed access.

我已多次验证我的OPTIONS请求确实发送了正确的响应,包括Access-Control-Allow-Origin标头,但浏览器似乎忽略了它:(

有什么想法吗?

编辑 - 我注意到的一些事情:

如果我尝试更新我的服务器正在发送的标头,除了我之外的其他人在发出请求时都会获得新更新的标头。好像我的计算机正在缓存对OPTIONS请求的响应。

这只发生在我的一个AJAX请求中。我在请求失败之前发出多个请求,并且除了最后一个请求之外,所有这些请求都正常工作(标题不是这样)。

EDIT !!!!

更新此帖(非常晚)。这最终不是CORS错误。我从Chrome中得到一个错误的“Access-Control-Allow-Origin”错误,但是当我直接运行AJAX请求时,我得到了真正的错误(通常应该是错误500,带有某种PHP错误消息) 。仍然不确定为什么会发生这种情况......

1 个答案:

答案 0 :(得分:2)

如果其他人遇到此问题,我会将上面的一些评论结合起来。

规范概述了CORS请求上下文中网络错误的非常具体的行为。对于预检请求,即使ACAO标头正确,也会将网络错误或非2xx响应报告为CORS错误。对于底层请求,根据我对规范的理解,应该可以看到特定错误。也就是说,Chrome似乎在使用非2xx的基础请求上显示CORS错误。看起来这是Chrome中报告的错误:http://code.google.com/p/chromium/issues/detail?id=269192