25

Angular.jsは、$ httpオブジェクトを使用してWebサービスにアクセスすると、X-Requested-With:XMLHttpRequestヘッダーをリクエストに自動的に追加します。

CORSを使用してアクセスしているWebサービスはX-Requested-Withヘッダーをサポートしていないため、それを削除しようとしましたが、$httpProviderオブジェクトにアクセスできません。未定義のオブジェクトエラーが発生し、コントローラーパラメーターで参照すると、Angularがそれを注入するため、「エラー:不明なプロバイダー:$ httpProviderProvider<-$httpProvider」が発生します。

したがって、ドキュメント(http://docs.angularjs.org/api/ng.$http)にあるように、$ httpProviderにアクセスして、そのヘッダーを送信しないようにangular.jsに指示するにはどうすればよいでしょうか...

4

4 に答える 4

26
angular.module('myModule', [])
    .config(['$httpProvider', function($httpProvider) {
        delete $httpProvider.defaults.headers.common["X-Requested-With"]
    }])
于 2012-09-07T06:29:14.703 に答える
11

Justenの回答に加えて、次のようにリクエストごとにそれを行うこともできます。

delete $http.defaults.headers.common['X-Requested-With']
于 2012-09-07T06:49:32.737 に答える
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';
}]);
于 2014-05-20T19:49:33.037 に答える
0

Angular JSバージョン1.1.1以降、ヘッダーを削除する必要はなくなりました。この変更はhttps://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Protecting_REST_Services:_Use_of_Custom_Request_Headersで言及されました

Josueが示すように、これは次のようにすべてのリクエストに簡単に追加できます。

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

特定の外部要求のヘッダーを削除するには、ヘッダーの構成を未定義に設定します。

let urlExternalValidator = 'https://openiban.com/validate/' + this.iban + '?getBIC=true&validateBankCode=true';
this.$http.get(urlExternalValidator, {
    // simple request to not trigger a CORS preflight
    // https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
    headers: {
        'X-Requested-With': undefined
    }
})

さらに、$ http(config)を呼び出すときに渡されるconfigオブジェクトにheadersプロパティを指定できます。これにより、デフォルトをグローバルに変更せずにオーバーライドできます。

リクエストごとに$httpProvider.defaults.headersを介して自動的に追加されたヘッダーを明示的に削除するには、headersプロパティを使用して、目的のヘッダーをundefinedに設定します。

https://docs.angularjs.org/api/ng/service/ $ http#setting-http-headers

于 2018-01-24T13:49:02.267 に答える