同一域上的CORS错误?


86

我现在遇到一个奇怪的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 /:我在其中运行Javascript应用程序的Python simpleHTTPserver。这个应用程式正在上方的伺服器执行Ajax要求。

有什么问题的想法吗?

编辑:

而且...港口是问题所在。感谢您的回答:)

如果有人也在使用Python瓶服务器,则可以按照本文中给出的答案解决CORS问题: Bottle Py:为jQuery AJAX请求启用CORS


10
由于它们在不同的端口上,因此不一样!
某个

端口号不同。这可能违反跨源规则。

4
请注意,IE不会考虑端口号。
Ray Nicholus 2013年

@some大多数浏览器还得出结论,如果一个浏览器带有“ www”,而另一个没有,则它们是不同的。细节决定成败。
很少“莫妮卡在哪里”有需要的人

@SeldomNeedy example.com,www.example.com,www1.example.com和mirror.www.example.com都是不同的域。example.comexample.comexample.comexample.com:80443都来自不同的来源。
一些

Answers:


122

仅当协议主机 端口相同时,才被认为是相同的:同源策略相同

如果要启用它,则必须通过添加标头来遵循跨域资源共享(cors)。Mozilla有例子

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

Access-Control-Allow-Origin: *

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

另请注意,某些请求会发送带有OPTION方法的预检请求,因此,如果您编写自己的代码,则也必须处理这些请求。有关示例,请参见Mozilla 。


8
在涉及AJAX的所有地方,都应以红色,大写和粗体突出显示。
佐尔坦施密特

5
作为附录这样的回答,请注意,'Access-Control-Allow-Origin: https://example.com'不是等同于'Access-Control-Allow-Origin: https://www.example.com'。如果您可以通过这两个网站访问您的网站,则响应标题中应同时包含这两个网站。
很少'哪里有莫妮卡'Needy'Apr

1
请注意,没有预检要求默认情况下,像简单的请求发送GETPOSTHEAD。有关其他详细信息,请参见答案中链接MDN文章
Emile Bergeron

@SeldomNeedy您不能有重复的标题
Mike Flynn

@MikeFlynn我的措词被承认有些松散,但我没有试图暗示这一点;服务器仅需要配置为根据请求发送适当的标头。
很少'哪里有莫妮卡'Needy

31

端口号不同。

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


1
除了443和80
约瑟夫色

15
包括443和80
code_monk

4
对问题的确认如何才能解决问题?发布答案花花公子。
Ritesh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.