小编典典

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

all

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

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


阅读 82

收藏
2022-05-13

共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/
),其中包含有关需要由服务器发送的确切标头的更多详细信息。

2022-05-13