【发布时间】:2013-12-13 10:13:21
【问题描述】:
所以我正在尝试使用 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 请求中。我在请求失败之前发出了多个请求,除了最后一个之外,所有请求都可以正常工作(标题保持不变)。
编辑!!!!
更新这篇文章(非常晚)。这最终不是 CORS 错误。我从 Chrome 收到错误的“Access-Control-Allow-Origin”错误,但是当我直接运行 AJAX 请求时,我收到了真正的错误(通常应该是错误 500,带有某种 PHP 错误消息) .仍然不确定为什么会发生这种情况......
【问题讨论】:
-
POST请求是否也发送Access-Control-Allow-Origin? -
不,它没有发送 Access-Control-Allow-Origin。刚开始在一台计算机(我的)上遇到这个问题。适用于其他开发人员,即使使用内部 IP 地址远程访问我的本地服务器
-
您的 POST 还必须发送 Access-Control-Allow-Origin,正如 @ExplosionPills 推断的那样。
-
从什么时候开始的?为什么进行相同呼叫的其他计算机不必发送该标头?手头更大的问题是,当我更新服务器响应代码时,要发送不同的响应标头(例如发送确切的来源而不是通配符“*”),我仍然会得到相同的标头。就好像我的计算机已经缓存了 OPTIONS 响应并且没有使用我从本地服务器发送的真实数据。我让其他开发人员尝试从他们的计算机发出相同的请求,指向我的本地网络 IP,他们得到了正确的标头,并且他们的请求不会失败。
-
我什至无法在我的 POST 请求中使用 Access-Control-Allow-Origin 标头发送,因为在我将 allow-origin 添加到允许的标题。
标签: javascript ajax cross-domain cross-domain-policy