Angularjs' Access-Control-Allow-Origin'多个子域请求

时间:2015-07-02 04:07:44

标签: javascript angularjs laravel

我想检查一下,我知道JavaScript代码受同源策略的限制,这意味着如果我尝试向任何外国来源发出请求,我将被“访问控制 - ”抓住允许来源'错误,只要我可以在标题中定义它就没问题。我的问题是,我不确定我的做法是否正确,因为我没有看到任何值在请求时传递给标头。这是我的Angular代码:(注意我使用$ resource来处理所有请求)

var SomeApp = angular.module('SomeApp',['ngResource','ngSanitize'])
SomeApp.factory('SomeAppService', ['$resource', function($resource){

    return {          
       firstActions : $resource(svrid('acns') + '/action/:payload',{payload:'@payload'},
                {
                    'remove': {method:'DELETE',isArray:true, cache:false},
                    'save' : {method:'POST', isArray:true, cache:false, headers:{'X-CSRF-TOKEN': CSRF_TOKEN, 'Access-Control-Allow-Origin': '*'}},
                    'query' : {method:'GET', isArray:true,cache:false},
                }, {cache:false}        
        ),

        //some more other functions
    };

 }]);

因此您可以看到我已经在其中一个post方法中包含headers:{'X-CSRF-TOKEN': CSRF_TOKEN, 'Access-Control-Allow-Origin': '*'}但是在执行操作时,浏览器控制台仍然提示我此错误

  

XMLHttpRequest无法加载   http://acns.example.com:8000/action/rIqj7RVUdeFVwkp36uxjCUzlYAXaTKwBeyJjdCMxZjk3OWU1NGQwYzRjODFlYWRjNDFkYzAyMGE1ZCIsInMiOiJmMTU4MDZjOWM1YjFlNWFjIn0=。   No' Access-Control-Allow-Origin'标题出现在请求的上   资源。起源' http://www.example.com:8000'因此不是   允许访问。

在这种情况下我缺少什么?另外我还想问一下是否可以将标题应用于整个firstAction函数?正如我在AngularJS documentation on $http中所读到的,它适用于特定的行动本身。我正在使用AngularJS 1.3.15

请告诉我任何可能的解决方案。谢谢

更新1:我已按barryvdh安装了一个模块,部分修复了该问题,但由于在此新主题中找到了errors,因此未完成100%完成。希望有人可以关闭这个话题。

2 个答案:

答案 0 :(得分:1)

不确定您是否已经这样做了,但是有几种方法可以在Laravel中设置响应头(我假设您正在使用它)。我也在我的一个应用程序中使用Angularjs,最后我这样做是为了解决类似的问题。

在"之前"在我的filters.php中,我添加了这个:

App::before(function($request)
{
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, X-Request-With, Token');

// .....

});

希望它有所帮助...

答案 1 :(得分:1)

Access-Control-Allow-Origin是响应头。你可以理解这篇关于CORS的解读。 (指定阅读简单示例)

就我在rails中的情况而言,我可以使用这个gem rack-cors来管理它,在laravel我发现这个包为laravel Cors https://github.com/barryvdh/laravel-cors