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にそのヘッダーを送信しないように指示します...
angular.module('myModule', [])
.config(['$httpProvider', function($httpProvider) {
delete $httpProvider.defaults.headers.common["X-Requested-With"]
}])
Justenの回答に加えて、次のようにリクエストごとに行うこともできます。
delete $http.defaults.headers.common['X-Requested-With']
変更ログを参照してください:
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