一尘不染

AngularJS对跨域资源执行OPTIONS HTTP请求

angularjs

我正在尝试将AngularJS设置为与跨域资源进行通信,在该域中,提供我的模板文件的资产宿主位于不同的域上,因此angular执行的XHR请求必须是跨域的。我已将适当的CORS标头添加到服务器上,以进行HTTP请求以使其正常工作,但它似乎不起作用。问题是,当我在浏览器(chrome)中检查HTTP请求时,发送到资产文件的请求是OPTIONS请求(应该是GET请求)。

我不确定这是否是AngularJS中的错误,还是我需要配置某些东西。据我了解,XHR包装器无法发出OPTIONS
HTTP请求,因此浏览器似乎在尝试确定是否“允许”在执行GET请求之前先下载资产。如果是这种情况,那么是否还需要为资产主机设置CORS标头(Access-
Control-Allow-Origin:http : //asset.host
..。
)?


阅读 336

收藏
2020-07-04

共1个答案

一尘不染

OPTIONS请求绝不是AngularJS错误,这是跨域资源共享标准强制浏览器行为的方式。请参阅此文档:https : //developer.mozilla.org/en-
US/docs/HTTP_access_control,其中在“概述”部分中指出:

跨域资源共享标准通过添加新的HTTP标头来工作,这些标头允许服务器描述允许使用Web浏览器读取该信息的一组来源。另外,对于可能导致用户数据产生副作用的HTTP请求方法(尤其是对于GET以外的HTTP方法或某些MIME类型的POST使用)。该规范要求浏览器“预检”请求,并使用HTTP
OPTIONS请求标头从服务器请求受支持的方法,然后在服务器“批准”后,使用实际的HTTP请求方法发送实际的请求。服务器还可以通知客户端是否应随请求发送“凭据”(包括Cookie和HTTP身份验证数据)。

提供一个适用于所有WWW服务器的通用解决方案非常困难,因为设置会因服务器本身和您打算支持的HTTP谓词而异。我鼓励您阅读这篇出色的文章(http://www.html5rocks.com/en/tutorials/cors/),其中包含有关服务器需要发送的确切标头的更多详细信息。

2020-07-04