我得到 angularjs 中缺少 CORS 标头“Access-Control-Allow-Origin”

Posted

技术标签:

【中文标题】我得到 angularjs 中缺少 CORS 标头“Access-Control-Allow-Origin”【英文标题】:im getting CORS header ‘Access-Control-Allow-Origin’ missing in angularjs 【发布时间】:2017-05-16 07:15:39 【问题描述】:

我收到CORS 标头丢失错误。我无法修改后端Web服务的代码,我只能更改客户端应用程序。

我可以在谷歌浏览器上添加“Allow control allow origin”插件,但我不想在所有客户端上安装插件来访问 api。如何更改我的AngularJS 代码,以免出现此问题?

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function ($scope, $http) 
    $http.get('url', 
        headers:  'Authorization': 'Basic a2VybmVsc3B==' 
    )
        .then(function (response) 
            $scope.names = response.data;
        );
);
</script>

【问题讨论】:

您的服务器应该发送该标头来告知允许的来源。 因为你有不同的API服务器,所以你可以在你的后端服务器中添加header "Access-Control-Allow-Origin", "*" 我可以通过在 google chrome 中添加插件来解决这个问题,然后我不能在前端应用程序中为 cors 标头丢失编写代码 您可以做到这一点的唯一方法是使用代理。 所有使用 jsonp 的建议都不起作用,因为 jsonp 不支持标头 您控制的服务器上的服务器端脚本,它向远程 api 或第三方服务发出 cURL 请求。进行网络搜索 【参考方案1】:

如果您使用 IIS Web 服务器,请将以下配置添加到您的 web.config 文件中。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Access-Control-Allow-Origin" value="*" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

如果您无权访问后端,请使用 $http.jsonp(url) 而不是 $http.get(url)

【讨论】:

OP 明确表示他们没有后端访问权限。这有什么帮助?【参考方案2】:

作为 cmets 中的mentioned,您必须使用代理或某种代理。没有办法解决这个问题。

不过,这相当简单:让服务于 angularjs 应用程序的服务器执行 api 调用。

首先,您必须了解什么是服务器和客户端。之后,您需要了解您的 angularjs 应用程序是从服务器服务。您的 angularjs 应用程序可以向该服务器发出 http 请求,然后该服务器将调用 api,并将结果返回给客户端:

我有点假设 Node 服务器正在为您的 angularjs 应用程序提供服务,但任何服务器都可以这样做,它能够发出 http 请求而不是跨源请求。


在您的情况下,当您调用 url 时,改为调用为您的应用程序提供服务的服务器,然后从该服务器创建一个将调用外部 api 的服务。

【讨论】:

终于有个理智的答案了! 值得一提的是还有第三方代理服务。我个人不喜欢使用无名的,但该选项确实存在 好点。但是我很少(从不)使用这些,因此我有点犹豫要解释一下。如果我觉得我可以添加一些有价值的东西会更新 我使用了雅虎支持的几种不同的方法。一个死了,被称为管道,非常酷。另一个 YQL 还活着,可以做很多不同的事情..xml to json, html scraper, 几个中的直接 json 检索【参考方案3】:

我有同样的错误。 前端的 Angular 向后端发出请求。 nginx 是代理。所以我将此行添加到我的 nginx 配置中

location /database/ 
        add_header Access-Control-Allow-Origin *;
        <other_lines>

这解决了我的 CORS 问题。

【讨论】:

以上是关于我得到 angularjs 中缺少 CORS 标头“Access-Control-Allow-Origin”的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 和 Laravel - 跨域 CORS / XHR 请求缺少(记住)cookie

在 Azure Web 应用/Azure API 上部署时缺少 CORS 标头

仅在 Angular 资源请求中缺少 CORS 标头

跨域请求被阻止:(原因:缺少 CORS 标头“Access-Control-Allow-Origin”)

AJAX 使用 CORS 获取自定义响应标头

缺少 CORS 400 标头(以及其他问题)