Access-Control-Allow-Origin 不允许 Origin <origin>

新手上路,请多包涵
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

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

原文由 bsr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 680
2 个回答

由于它们在不同的端口上运行,它们是不同的 JavaScript origin 。它们在同一台机器/主机名上并不重要。

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

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

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

或者,为简单起见:

 Access-Control-Allow-Origin: *

如果您的服务器尝试设置 cookie 并且您使用 withCredentials = true ,请不要使用“*”

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

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

原文由 gen_Eric 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

Chrome 扩展允许控制允许来源:*

原文由 Billy Baker 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题