所以我正在尝试使用 javascript 进行跨域 AJAX 请求。
我的 OPTIONS 请求正在执行,没有任何问题,我正在返回
Access-Control-Allow-Origin:*
作为响应 header 。但是,当尝试发出后续 POST 请求时,出现以下错误:
请求的资源上不存在“Access-Control-Allow-Origin” header 。因此不允许访问源“http://phoenix-client.local”。
我已经多次验证我的 OPTIONS 请求确实发送了正确的响应,包括 Access-Control-Allow-Origin header ,但浏览器似乎忽略了它:(
有什么想法吗?
编辑 - 我注意到的几件事:
如果我尝试更新我的服务器正在发送的 header ,除了我之外的其他人在发出请求时都会得到最新更新的 header 。就好像我的计算机正在缓存对 OPTIONS 请求的响应。
这只发生在我的一个 AJAX 请求中。我在请求失败之前发出了多个请求,除了最后一个请求之外,所有请求都工作正常( header 保持原样)。
编辑!!!!
更新这篇文章(非常晚)。这最终不是 CORS 错误。我从 Chrome 收到一个错误的“Access-Control-Allow-Origin”错误,但是当我直接运行 AJAX 请求时,我得到了真正的错误(通常应该是错误 500,带有某种 PHP 错误消息) .仍然不确定为什么会发生这种情况......
最佳答案
如果其他人遇到这个问题,我会结合上面的一些评论。
该规范概述了 CORS 请求上下文中网络错误的非常具体的行为。对于预检请求,网络错误或非 2xx 响应将被报告为 CORS 错误,即使 ACAO header 是正确的。对于底层请求,根据我对规范的理解,具体错误应该是可见的。也就是说,Chrome 似乎在非 2xx 的基础请求上显示 CORS 错误。看起来这是 Chrome 中报告的错误:http://code.google.com/p/chromium/issues/detail?id=269192 .
关于javascript - 使用正确的 header 和 OPTIONS 请求,仍然得到 "No Access-Control-Allow-Origin header is present on the requested resource",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20248077/