web-dev-qa-db-ja.com

angular.js $ httpオブジェクトがX-Requested-Withヘッダーを送信しないようにするにはどうすればよいですか?

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

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

だから、どうやって$ httpProviderにアクセスできるのか、ドキュメント(http://docs.angularjs.org/api/ng.$http)に記載されているように、angular.jsにそのヘッダーを送信しないように指示します...

25
opensas
angular.module('myModule', [])
    .config(['$httpProvider', function($httpProvider) {
        delete $httpProvider.defaults.headers.common["X-Requested-With"]
    }])
26
Justen

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

delete $http.defaults.headers.common['X-Requested-With']
11
opensas

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';
}]);

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';
    }]);

header to undefined の構成を設定して、特定の外部リクエストのヘッダーを削除します。

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プロパティを使用して、目的のヘッダーを未定義に設定します

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

0
ofthelit