我在我的机器上运行了一个NodeJS服务器,我试图用在同一台机器上运行的网站上的ajax访问它。我收到了一个跨域错误: XMLHttpRequest无法加载http://localhost:3000/games。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost”访问。
我在这台机器上访问了一个不同的api,用php运行,地址是 http://localhost/games
我的想法是因为nodejs服务器在与apache不同的端口上运行导致跨域问题?
任何见解都会很棒,对于api开发并不熟悉,也不确定从何处开始。
有人建议我尝试使用JSONP,但我不确定这是否在技术上需要,因为api在同一台机器上运行?
答案 0 :(得分:2)
原点被定义为URI方案,主机名和端口号的组合,因此您确实违反了从http://localhost到http://localhost:3000执行XMLHttpRequest的相同原始策略
我对nodejs不是很熟悉,但我看到了五个选项:
答案 1 :(得分:1)
由于您需要能够发送POST请求,因此您唯一的选择是:
如果您使用快递,最简单的方法是实施CORS。大多数工作都是为您完成的,您需要做的就是包含cors模块并将其作为中间件附加。
反向代理是下一个要查看的解决方案。它的作用是将所有请求带到给定的域或域/文件夹,并将它们重新路由到指定的域,在这种情况下,您的节点服务器在不同的端口上运行。例如,您可以将所有请求路由到http://localhost/api
到http://localhost:3000
。研究您正在使用的网络服务器的Reverse Proxy
。
第三种解决方案是让服务html的web服务器也向节点服务器发送请求。我认为这对我的口味有点过于讨厌,因为上述两个解决方案很容易实现,并且不会向html网络服务器添加额外的代码。但是,如果您没有拥有目标网络服务器,那么如果目标网络服务器不支持CORS,这将是唯一的选择。