当前位置: 首页 > 面试题库 >

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

夏骞尧
2023-03-14
问题内容

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

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


问题答案:

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



 类似资料:
  • 用于 Nuxt.js 的 http-proxy 中间件解决方案 npm i @nuxtjs/proxy -D 在 nuxt.config.js 配置文件中添加对应的模块,并设置代理 modules: [ '@nuxtjs/axios', '@nuxtjs/proxy' ], axios: { proxy: true }, proxy: { '/a

  • 问题内容: 我有一个使用AngularJS构建的简单网站,该网站调用json数据的API。 但是我遇到了跨域起源问题,是否可以解决跨域请求? 错误: XMLHttpRequest无法加载http://api.nestoria.co.uk/api?country=uk&pretty=1&action=search_listings&place_name=soho&encoding=json&list

  • 我有一个简单的网站,我正在用AngularJS构建,它为json数据调用API。 然而,我得到跨域起源的问题,是否有任何围绕这允许跨域请求? 错误: XMLHttpRequest无法加载http://api.nestoria.co.uk/api?country=uk

  • 问题内容: 这是我的代码: 这适用于GET请求而不是POST! 我将Apache用作服务器,并使用以下命令对其进行了配置: 在我的angularjs中,我包含在模块应用程序的配置中: 但是请求POST仍然无法正常工作! 我希望有人能提出任何想法。 问题答案: 在服务器端添加这些标头: 如果仍然无法正常工作,请发布浏览器正在发送的预检请求的详细信息。 为什么要这样做? 如果不是简单的请求(例如,表单

  • 我想显示数据从API使用angularJS。当在同一台电脑上运行代码时,这段代码工作正常。但是当我试图在另一台电脑上测试时,它显示错误,请求的资源上没有访问控制允许来源的标头。angularjs 我使用的是1.4.8 这是我的密码:

  • 我试图从我的新Angular应用程序中调用REST web服务。当发出请求时,我会得到以下错误: XMLHttpRequest无法加载http://localhost:8080/WebService。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源“http://localhost”。 我发现这是因为浏览器不允许这样的操作。 编辑我也试着把它添加到我的angular应用程序中: