【问题标题】:With correct headers and OPTIONS request, still getting "No Access-Control-Allow-Origin header is present on the requested resource"使用正确的标头和 OPTIONS 请求,仍然收到“请求的资源上不存在访问控制允许来源标头”
【发布时间】: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


【解决方案1】:

如果其他人遇到这个问题,我会结合我上面的一些cmets。

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

【讨论】:

  • 也遇到了这个问题。简而言之,如果您突然收到此错误,并且非常确定您的 CORS 工作正常,请检查服务器响应中是否存在 500 或其他问题。 Chrome 误报了。
猜你喜欢
  • 2016-03-15
  • 2020-09-25
  • 2021-11-17
  • 2017-04-14
  • 2020-09-17
  • 2018-07-19
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多