为什么从本地主机向本地主机发出请求时会启用同源策略?

7

我将后端API作为一个独立的项目与前端HTML5应用程序分开。我使用Yeoman进行前端开发。 Yeoman在localhost:3501上运行,后端在localhost:3000上运行。当我从浏览器中进行API请求(使用AngularJS的$http),我会遇到同源策略:

XMLHttpRequest cannot load http://localhost:3000/venues. Origin http://localhost:3501 is not allowed by Access-Control-Allow-Origin.

据我所知,同源策略应该只在跨不同域名进行请求时生效。为什么当我们从本地主机向本地主机发出请求时(尽管是不同的端口),它会抱怨呢?
如何使这个工作起来,这会在生产中引起问题吗?
2个回答

14

端口也算是跨域请求的一部分,因此从浏览器的角度来看,http://localhost:3000http://localhost:3501两个不同的域名

如果你需要让前后端应用程序运行在不同的端口上,请考虑使用 http://enable-cors.org/


4
根据W3C的说法,“一个URL的方案、主机和端口定义了其来源”,因此不同的端口导致了你的问题。
两种可能的解决方案:
  • CORS(跨源资源共享)
  • 使用JSONP请求
两者都需要对后端进行更改(我对CORS不够熟悉,但AngularJS应该支持它,这意味着它对前端的更改最小)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接