与域在同一台计算机上的 NODEJS 服务器 运行 的 CORS 错误

CORS error for NODEJS server running on the same machine as domain

我的机器上有一个 NodeJS 服务器 运行,我正尝试从同一台机器上的网站 运行 使用 ajax 访问它。但是我遇到了跨域错误: XMLHttpRequest 无法加载 http://localhost:3000/games. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' 因此不允许访问。

我可以访问这台机器上的另一个 api,运行 php,地址是 http://localhost/games.

我的想法是因为 nodejs 服务器 运行 在与 apache 不同的端口上导致跨域问题?

任何见解都会很棒,我是 api 开发的新手,不知道从这里到哪里去。

有人建议我尝试使用 JSONP,但我不确定这在技术上是否需要,因为 api 是 运行 在同一台机器上?

来源定义为 URI 方案、主机名和端口号的组合,因此您确实违反了从 http://localhost to http://localhost:3000

执行 XMLHttpRequest 的同源策略

我对 nodejs 不是很熟悉,但我看到了五个选项:

  • 显然最简单的事情是运行所有东西都在同一个端口上,不确定这在你的场景中是否可行。
  • 使用 JSONP(仅对 GET 请求有效)
  • 实施 CORS headers(它与 IE <= 9 + other corner case anomalies 有一些兼容性问题)
  • 实施代理以始终与 http://localhost from client. Let the proxy deal with http://localhost:3000 通信并 return 响应客户端。
  • 使用替代方法执行跨域请求 XDomain

由于您需要能够发送 POST 请求,您唯一的选择是:

  • 实施 CORS
  • 反向代理
  • php 代理(或您用于服务 html 页面的任何语言)

如果您使用的是 express,最简单的方法就是实施 CORS。大部分工作都为您完成,您需要做的就是包含 cors 模块并将其作为中间件附加。

反向代理是下一个要查看的解决方案。它所做的是将所有请求发送到给定域或 domain/folder 并将它们重新路由到指定域,在这种情况下,您的节点服务器 运行 在不同的端口上。例如,您会将所有请求路由到 http://localhost/apihttp://localhost:3000。研究 Reverse Proxy 您正在使用的网络服务器。

第三个解决方案是让服务于 html 的网络服务器也向节点服务器发送请求。我认为这对我的口味来说有点太老套了,因为上述两个解决方案很容易实现,并且不会向 html 网络服务器添加额外的代码。但是,如果您不拥有目标网络服务器,并且目标网络服务器不支持 CORS,这将是唯一的选择。