如何防止angular.js $ http对象发送X-Requested-With标头?

ope*_*sas 25 javascript web-services xmlhttprequest angularjs

当使用$ http对象访问Web服务时,Angular.js会自动向请求添加X-Requested-With:XMLHttpRequest标头.

我使用CORS访问的Web服务不支持X-Requested-With标头,所以我试图消除它,但我不能访问$ httpProvider对象.我得到一个未定义的对象错误,如果我在控制器参数中引用它,那么angular注入它我得到一个"错误:未知的提供者:$ httpProviderProvider < - $ httpProvider"

所以我想知道如何访问$ httpProvider,就像它在文档(http://docs.angularjs.org/api/ng.$http)中所说的那样告诉angular.js不要发送那个头...

Jus*_*ten 26

angular.module('myModule', [])
    .config(['$httpProvider', function($httpProvider) {
        delete $httpProvider.defaults.headers.common["X-Requested-With"]
    }])
Run Code Online (Sandbox Code Playgroud)


ope*_*sas 11

我发现,除了Justen的回答,我也可以按照这样的要求进行:

delete $http.defaults.headers.common['X-Requested-With']
Run Code Online (Sandbox Code Playgroud)

  • `$ http.defaults.headers.common ...`和`$ httpProvider.defaults.headers.common ...`之间有什么区别? (7认同)
  • 没有不同.使用$ httpProvider在构造$ http服务之前配置标头; 但是使用$ http可以在创建$ http服务后立即添加标题.共同点没有区别 (3认同)

Jos*_*rra 6

由于不再需要Angular JS 1.1.1版删除标题.

请参阅更改日志:https:
//github.com/angular/angular.js/blob/master/CHANGELOG.md#111-pathological-kerning-2012-11-26

像我这样的人使用标题来识别ajax请求并以不同方式响应它们.

例如,在会话到期后发出请求.

你可以像这样重新启用标题:

angular.module('yourModule', [])
.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
}]);
Run Code Online (Sandbox Code Playgroud)