与域在同一台计算机上运行的NODEJS服务器的CORS错误
CORS error for NODEJS server running on the same machine as domain
我的机器上运行着一个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/api
到http://localhost:3000
。研究您正在使用的Web服务器的Reverse Proxy
。
第三种解决方案是让提供html的Web服务器也向节点服务器发送请求。我认为这对我的口味来说有点太麻烦了,因为上面两个解决方案很容易实现,而且不会向html Web服务器添加额外的代码。但是,如果您没有目标Web服务器,那么在目标Web服务器不支持CORS的情况下,这将是唯一的选择。
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- "无法获取/null”;当使用nodejs运行服务器时
- 运行nodejs静态网站
- NodeJs:如何在EC2实例中查看PM2运行的NodeJS服务器的日志
- Nodejs/bin/www脚本在启动时未运行
- 在nodejs中运行Python脚本
- Nodejs:在节点服务器启动时运行一个js文件
- 在NodeJS中使用promise时未运行Console.log
- 当在运行nodejs的服务器上调用new Date()时,Date将返回服务器启动时的日期
- 运行 NodeJS 时出错
- 在shellscript循环中运行NodeJS文件
- 我应该如何从Java应用程序运行NodeJS
- 我可以在HTML文档中运行Nodejs JavaScript脚本吗?
- 如何用ES6类运行NodeJS
- 从PhantomJS / CasperJS中单独运行nodejs文件
- Php运行nodejs javascript grunt任务
- 在非系统驱动器上运行NodeJS
- 如何在浏览器中运行nodejs代码而不是命令行
- 在appFog上运行NodeJS应用程序
- 运行 nodejs Thrift 示例时未找到对 Thrift 的引用