在从localhost向localhost发出请求时,为什么同源策略会起作用?

时间:2013-01-10 16:36:25

标签: api google-chrome angularjs same-origin-policy yeoman

我将后端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.

AFAIK,只有在跨不同域提出请求时才应启动相同的原始政策。当我们从localhost请求localhost(虽然是不同的端口)时,为什么会抱怨?

我如何才能完成这项工作?这会导致生产中的问题吗?

2 个答案:

答案 0 :(得分:13)

端口也会计入跨域请求,因此http://localhost:3000http://localhost:3501 2个不同的域(从浏览器的角度来看)。

如果您需要在不同端口上运行这两个应用程序(客户端和后端),请考虑使用http://enable-cors.org/

答案 1 :(得分:3)

根据W3C,“来源是由URL的方案,主机和端口定义的”,因此不同的端口会导致您的问题。

两种可能的解决方案:

  • CORS(跨源资源共享)
  • 使用JSONP请求

两者都需要改变你的后端(我不太熟悉.CORS可能意味着你的前端变化最小(我认为AngularJS支持它开箱即用)。