【问题标题】:CORS error on same domain?同一域上的CORS错误?
【发布时间】:2013-11-26 19:36:54
【问题描述】:

我现在遇到了一个奇怪的 CORS 问题。

这是错误信息:

XMLHttpRequest cannot load http://localhost:8666/routeREST/select?q=[...] 
Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin

两台服务器:

  • localhost:8666/routeREST/ : 这是一个简单的 Python Bottle 服务器。
  • localhost:8080/ :我运行 y Javascript 应用程序的 Python simpleHTTPserver。此应用正在上面的服务器上执行 Ajax 请求。

有没有想过可能是什么问题?

编辑:

而且...端口是问题所在。谢谢你的回答:)

如果有人也在使用 Python 瓶服务器,您可以按照这篇文章中给出的答案来解决 CORS 问题: Bottle Py: Enabling CORS for jQuery AJAX requests

【问题讨论】:

  • 因为它们在不同的端口,所以不一样!
  • 端口号不同。这可能违反跨域规则。
  • 请注意,IE 不考虑端口号。
  • @some 大多数浏览器还得出结论,如果一个有“www”而另一个没有,它们就不一样了。魔鬼在细节中。
  • @SeldomNeedy example.com、www.example.com、www1.example.com 和 mirror.www.example.com 都是不同的域。 example.comexample.comexample.comexample.com:80443都来自不同的来源。

标签: javascript python ajax cross-domain cors


【解决方案1】:

只有当protocolhostport相同时才认为相同: Same Origin Policy

如果你想启用它,你必须通过添加标题来关注Cross-Origin Resource Sharing (cors)。 Mozilla有examples

您需要在响应中添加 Access-Control-Allow-Origin 作为标题。允许所有人(您可能这样做):

Access-Control-Allow-Origin: *

如果您需要支持多个来源(例如 example.comwww.example.com),请将您的回复中的 Access-Control-Allow-Origin 设置为请求中 Origin-header 的值(在您验证来源被列入白名单。)

另外请注意,有些请求会发送一个带有 OPTION 方法的预检请求,因此如果您编写自己的代码,您也必须处理这些请求。请参阅 Mozilla 获取 examples

【讨论】:

  • 这应该在涉及 AJAX 的所有地方用红色、大写字母和粗体突出显示。
  • 作为此答案的附录,请注意 'Access-Control-Allow-Origin: https://example.com' NOT 等同于 'Access-Control-Allow-Origin: https://www.example.com'。如果您的网站可以通过这两种方式访问​​,则您的响应标头中应该同时具有这两种方式。
  • 请注意,对于GETPOSTHEAD 等简单请求,默认情况下不会发送预检请求。有关更多详细信息,请参阅MDN article linked in the answer
  • @SeldomNeedy 你不能有重复的标题
  • @MikeFlynn 诚然,我的措辞有点松散,但我并不是在暗示这一点。服务器只需配置为根据请求发送适当的标头。
【解决方案2】:

端口号不同。

如果任何方案、主机名或端口不匹配,则请求被视为跨域。

【讨论】:

  • 443 和 80 除外。
  • 包括443和80
  • 如何确认问题才能解决问题?发布答案老兄。
猜你喜欢
  • 1970-01-01
  • 2012-01-08
  • 2021-11-22
  • 2015-10-04
  • 2019-11-03
  • 2014-04-01
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多