我想检查一下,我知道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%完成。希望有人可以关闭这个话题。
答案 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