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

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

本文关键字:运行 NODEJS 服务器 错误 CORS 计算机 一台      更新时间:2023-09-26

我的机器上运行着一个NodeJS服务器,我正试图从同一台机器上运行的网站上使用ajax访问它。不过,我遇到了一个跨域错误:XMLHttpRequest无法加载http://localhost:3000/games.请求的资源上不存在"Access Control Allow Origin"标头。原点'http://localhost因此不允许访问。

我在这台机器上访问了一个不同的api,用php运行,地址是http://localhost/games.

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

任何见解都将是伟大的,我是api开发的新手,不知道从这里走到哪里。

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

源被定义为URI方案、主机名和端口号的组合,因此您实际上打破了从http://localhost到http://localhost:3000

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

  • 显然,最简单的方法是在同一个端口上运行所有内容,不确定这在您的场景中是否可能
  • 使用JSONP(仅对GET请求有效)
  • 实现CORS标头(它与IE<=9+其他角情况异常存在一些兼容性问题)
  • 实现始终与之通信的代理http://localhost来自客户端。让代理人处理http://localhost:3000并向客户端返回响应
  • 使用替代方案作为XDomain执行跨域请求

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

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

如果您使用express,那么最简单的方法就是实现CORS。大部分工作都是为您完成的,您所需要做的就是包括cors模块并将其作为中间件连接。

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

第三种解决方案是让提供html的Web服务器也向节点服务器发送请求。我认为这对我的口味来说有点太麻烦了,因为上面两个解决方案很容易实现,而且不会向html Web服务器添加额外的代码。但是,如果您没有目标Web服务器,那么在目标Web服务器不支持CORS的情况下,这将是唯一的选择。