2017-06-14 78 views
1

我有一个错误,有点在我头上调试。 它从HTTP发生得到Angular2,看起来像这样:这是一个跨域或跨协议请求?

constructor(private http: Http) {} 

... 

this.http.get('someApi.abc.com/stuff?params`) 

哪个失败,看起来像这样的错误:

的XMLHttpRequest无法加载http://someApi.abc.com/stuff?params“到 ” http://elsewhere.abc.com/“已被封锁按CORS政策:否 “访问控制 - 允许来源”标题出现在请求的 资源中。原因'http://local.abc.com'因此不允许 访问。

我认为有2个问题:我不明白的重定向(可能需要联系someApi所有者?)和CORS问题。

我的理解是,域名是:abc.com 且协议为:http 所以应该会有不涉及CORS废话。我显然错了,但不明白为什么:(

+0

您必须提供您r app backend – alehn96

回答

1

的同源策略是基于域需要精确匹配。local.abc.com不完全匹配someApi.abc.com。那么http://local.abc.comhttp://someApi.abc.com是两个完全不同的起源。因此,如果您的前端JavaScript代码在源http://local.abc.com处运行,并且它向http://someApi.abc.com发出请求,那么这是一个跨源请求,因此CORS会涉及;具体而言,浏览器不会允许您的前端JavaScript代码访问响应如果http://someApi.abc.com网站在其响应中未发送Access-Control-Allow-Origin响应标头,则从这样的请求中删除。

+0

我明白了。我没有意识到需要匹配的'someApi'。它必须是跨源的,并且在API上返回响应中的“Access-Control-Allow-Origin”标头。我需要做什么与我的结束头文件,以确保这将工作? – user2759883

+0

就CORS协议而言,您不必对前端代码的客户端头进行任何操作。从客户端发送特殊CORS头文件的唯一情况是访问控制请求头和访问控制请求方法请求头 - 但这些头文件是由浏览器自动发送的,并且仅适用于CORS印前检查OPTIONS请求浏览器自己做。 Origin请求头也是CORS协议的一部分,并且始终为来自前端JS的跨源请求发送& - 但这又是一个请求标头浏览器自动添加他们自己的 – sideshowbarker