WedX - журнал о программировании и компьютерных науках

Как запретить объекту angular.js $http отправлять заголовок X-Requested-With?

Angular.js при доступе к веб-службе с использованием объекта $http автоматически добавляет в запрос заголовок X-Requested-With:XMLHttpRequest.

Веб-служба, к которой я обращаюсь с помощью CORS, не поддерживает заголовок X-Requested-With, поэтому я попытался устранить его, но не могу получить доступ к объекту $httpProvider. Я получаю ошибку неопределенного объекта, и если я ссылаюсь на нее в параметрах контроллера, так что angular вводит ее, я получаю «Ошибка: Неизвестный поставщик: $httpProviderProvider ‹- $httpProvider»

Поэтому мне интересно, как я могу получить доступ к $httpProvider, как это сказано в документах (https://docs.angularjs.org/api/ng.$http), чтобы указать angular.js не отправлять этот заголовок...


Ответы:


1

Я обнаружил, что, помимо ответа Justen, я также могу сделать это для каждого запроса следующим образом:

delete $http.defaults.headers.common['X-Requested-With']
07.09.2012
  • какая разница между $http.defaults.headers.common… и $httpProvider.defaults.headers.common… ? 20.09.2013
  • нет разницы. используя $httpProvider, вы настраиваете заголовки до создания службы $http; но используя $http, вы добавляете заголовки сразу после создания службы $http. В общем разницы нет 18.02.2014

  • 2

    Начиная с версии 1.1.1 Angular JS удаление заголовка больше не требуется.

    Смотрите журнал изменений:
    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';
    }]);
    
    20.05.2014
  • Приятно читать здесь и замечать это ;) Нет необходимости вручную удалять предварительные проверки CORS: prevent CORS preflight checks by removing X-Requested-With from header defaults 26.08.2014
  • Вместо X-Requested-With следует использовать стандартные заголовки HTTP, такие как Accept, чтобы отличить вызовы XHR от обычных вызовов HTTP. Стандартные заголовки не запускают предварительную проверку для CORS и, следовательно, уменьшают задержку на 50 %. 14.08.2015

  • 3

    Начиная с версии 1.1.1 Angular JS удаление заголовка больше не требуется. Это изменение было упомянуто на 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';
        }]);
    

    Установите для заголовка значение 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), которое переопределяет значения по умолчанию, не изменяя их глобально.

    Чтобы явно удалить заголовок, автоматически добавляемый через $httpProvider.defaults.headers для каждого запроса, используйте свойство headers, установив для желаемого заголовка значение undefined.

    https://docs.angularjs.org/api/ng/service/$ http#setting-http-заголовки

    24.01.2018

    4
  • Когда я это делаю, он отлично работает в Chrome, но, похоже, имеет побочный эффект отправки заголовка запроса «Происхождение» как «нулевой». Это очень плохо, потому что мой сервер возвращает заголовок ответа «Access-Control-Allow-Origin» с тем же значением, которое он получает из запроса «Origin», поэтому CORS не работает в браузере. 18.07.2013
  • В моем комментарии выше я забыл указать, что браузер, в котором происходит сбой (отправка заголовка запроса «Происхождение» как «нулевой»), — это Safari, как для Mac, так и для iOS. 18.07.2013
  • Как его обратно добавить, но не в конфиге, а в самом $http промисе? кажется $httpProvider.defaults.headers.common["X-Requested-With"] это массив? 19.08.2014
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]