源<原始>不受访问控制-允许-源

2022-08-30 00:51:58
XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin. 

我阅读了有关跨域ajax请求的信息,并了解了潜在的安全问题。在我的例子中,2台服务器在本地运行,并且喜欢在测试期间启用跨域请求。

localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server

我正在向发出 ajax 请求,而我的页面是从节点服务器加载的。什么是最简单,最安全的(不想用选项启动chrome)。如果我必须改变,我应该在节点服务器上做吗?如何?localhost:8080 - GAE serverdisable-web-security'Content-Type'


答案 1

由于它们运行在不同的端口上,因此它们是 不同的 JavaScript 。它们是否位于同一计算机/主机名上并不重要。origin

您需要在服务器上启用 CORS (localhost:8080)。查看此站点: http://enable-cors.org/

您需要做的就是向服务器添加一个 HTTP 标头:

Access-Control-Allow-Origin: http://localhost:3000

或者,为简单起见:

Access-Control-Allow-Origin: *

如果您服务器尝试设置cookie并且您使用withCredentials = true

响应凭据请求时,服务器必须指定域,并且不能使用通配符。

您可以在此处阅读有关与Credentials的更多信息


答案 2

如果您需要在Chrome中快速解决ajax请求,此Chrome插件会自动允许您通过添加适当的响应标头从任何来源访问任何站点

Chrome 扩展程序允许-控制-允许-来源: *