AngularJs No'Access-Control-Allow-Origin'

时间:2016-04-11 15:32:42

标签: angularjs

我正在尝试使用Angular这样的请求:

(function () {
    'use strict';

    angular.module('app')
        .service('requestService',requestService);

    function requestService($http) {
        this.post = function(url, data) {
            return $http({
                'method': 'POST',
                'url': url,
                'data': $.param(
                    data
                )
            });
        }
    }
})();

我在控制台中收到错误:

XMLHttpRequest cannot load http://lsupport.dev/api/v1/login. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

我的http://localhost:3000是用Gulp构建的。我已经在网上搜索了很多,但我找不到解决方案。

3 个答案:

答案 0 :(得分:0)

您需要在服务器(远程)上启用CORS ,以允许代码执行具有不同域的请求。

CORS-Wikipedia

答案 1 :(得分:0)

您必须访问服务器所在的服务器或服务器所有者需要启用它。

请查看以下帖子了解更多详情。

Header set Access-Control-Allow-Origin in .htaccess doesn't work

Access-Control-Allow-Origin Multiple Origin Domains?

Homestead是Nginx服务器请按照步骤操作。要解决它。

Handling CORS with Nginx

访问控制源与AngularJS无关,服务器端响应特定请求的问题根据您的服务器类型(如Apache,Nginx)有不同的配置。

答案 2 :(得分:-1)

您正在提出跨域请求。

换句话说,您发出请求的服务器的域名与您请求的服务器的域名不同。

由于此处涉及“风险”,您提出请求的服务器必须设置Access-Control-Allow-Origin标头。谷歌你应该使用哪些。这允许从任何域(或域的白名单)向此服务器发出HTTP请求。

此外,在进行交叉原始POST和PUT请求时,客户端首先会发出飞行前OPTIONS请求。

此OPTIONS请求有一个目的,用于确定它们是否正确访问Access-Control-Allow-Origin标头。如果是,它将发出POST请求。如果没有,它将失败。这是为了节省在不允许的情况下发布大量数据的时间。

如果您在浏览器开发者控制台中检查NET选项卡,您将看到此OPTIONS请求。