AngularJS - 阻止跨源请求

时间:2014-06-11 23:03:13

标签: angularjs request

我正在开发一个AngularJS项目,并且我正在使用外部Symfony REST API。但是,我的请求被Angular / JS阻止。我做了一些研究,并在我的应用程序的配置部分添加了以下行:

angular
.module('appName', [
  ....
])
.config(['$routeProvider', '$httpProvider', function($routeProvider, $httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];

..

但是,firebug仍然会抛出错误:Cross Origin请求被阻止.. 当我查看“网络”时萤火虫的标签,这是我得到的: NET tab screenshot

对这个问题有什么看法? 提前谢谢。

2 个答案:

答案 0 :(得分:4)

看起来您的symfony2应用程序在OPTIONS请求响应中返回不适当的CORS标头...

我在几个项目中使用symfony2和angularjs,并且在角度方面没有任何特殊功能可以使它工作。

要返回正确的CORS标头,我在symfony2应用中使用https://github.com/nelmio/NelmioCorsBundle

dev服务器有配置:

nelmio_cors:
    defaults:
        allow_credentials: false
        allow_origin: []
        allow_headers: []
        allow_methods: []
        expose_headers: []
        max_age: 0
        hosts: []
    paths:
        '^/api/':
            allow_origin: ['*']
            allow_headers: ['X-Requested-With','Content-Type','Authorization']
            allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
            allow_credentials: true
            max_age: 3600

答案 1 :(得分:0)

它对我不起作用。在所有事情尝试之后,我在我的localhost上创建了一个PHP代理页面,它执行以下操作

<?php echo file_get_contents($_REQUEST['url']); ?>

我的角度控制器调用代理

(function (){
    var app=angular.module('xxx',[]);

    app.controller('AdsController', ['$http', function($http)
    {
      var ads = this;
      ads.deals = [];
      $http.get('/proxy.php?url=whatvererurl'){
          ads.deals = data;
          console.log(ads.deals);
      });
    }]);

}
)();

只是不要忘记编码网址