【问题标题】:AngularJS No 'Access-Control-Allow-Origin' header [duplicate]AngularJS没有'Access-Control-Allow-Origin'标头[重复]
【发布时间】:2016-08-12 14:30:19
【问题描述】:

我有一个 AngularJS 应用程序,我需要将数据发布到第三方 URL,该 URL 用于在第三方服务器上存储一些数据。当我在下面运行我的代码时出现以下错误: XMLHttpRequest 无法加载 http://thirdparty.url.com/。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:51491' 因此不允许访问。

我在 AngularJS 工厂中运行的代码是:

return $http({
            url: '//thirdparty.url.com',
            method: "POST",
            data: params_string,
            headers: {
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT',
                'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept'
            }
        });

【问题讨论】:

  • 看看这篇文章,它可能对你有帮助:stackoverflow.com/questions/21102690/…
  • 服务器不允许您的 url 访问数据。您可以使用 JSONP 访问,也可以要求服务器端开发人员允许您的 url 访问数据
  • 我认为这不是 chrome 问题。我在 Firefox 中尝试并得到错误“跨域请求被阻止:同源策略不允许读取thirdparty.url.com 的远程资源。(原因:CORS 标头'Access-Control-Allow-Origin'缺失)。”
  • 如果我要将我的应用程序部署到一个实际的网站(不是本地主机),那么我是否相信第三方 URL 应该接受我的请求?

标签: javascript angularjs cors


【解决方案1】:

跨域资源共享 (CORS) 是一种规范,它定义了 Web 服务器允许其资源被运行在来自不同域的网页中的脚本访问的方式。

服务器和客户端一起工作,使用 HTTP 标头使访问跨源资源成为可能。

在您的情况下,因为您的浏览器(客户端)是 chrome/Firefox(而不是旧版本的 IE),所以问题不在于浏览器。

当你进行ajax调用时,浏览器默认会添加一个请求头

  Origin: yourdomainname

只有当服务器(http://thirdparty.url.com) 发送类似于下面的响应时,您的 ajax 调用才会成功

Access-Control-Allow-Origin: *

在您的情况下,服务器未发送上述响应标头。

【讨论】:

    【解决方案2】:

    这意味着您的http://thirdparty.url.com/ 不接受来自/不是来自http://thirdparty.url.com/ 的外部来源的请求,因此您必须从您的thirdparty.url.com 启用它

    【讨论】:

    • 这是真的,但我怀疑它是否在每种情况下都能提供解决方案(假设我们无权手动访问第三方的标头),因为可以从浏览器修改标头以使CORS 请求。在下面发布我的答案。
    • 一旦部署就无济于事了。你不会期望普通用户这样做
    【解决方案3】:

    Access-Control-Allow-Origin 标头需要添加到您尝试访问的thirdparty.url.com 中,而不是您自己的代码中。网站可以控制是否允许访问用户,因此您可以从自己的角度做任何事情。

    【讨论】:

      【解决方案4】:

      添加扩展名CORS

      到您的 chrome 浏览器。

      【讨论】:

      • 这对生产有什么帮助?
      • 我明白了。我刚刚从问题中看到了 localhost ,并试图在此基础上给出解决方案。我同意这对生产没有帮助。
      【解决方案5】:

      您无法从客户端启用CORS。 我应该在服务器级别设置。

      HTTP access control (CORS)

      【讨论】:

        猜你喜欢
        • 2016-11-28
        • 2016-01-21
        • 1970-01-01
        • 2014-02-01
        • 2017-09-19
        • 2015-04-02
        • 2020-10-24
        • 1970-01-01
        相关资源
        最近更新 更多