2015-12-04 6 views
1

Мне нужно добавить некоторую общую дополнительную информацию (которую нужно отправить с большинством наших HTTP-запросов) для перекрестных доменных HTTP-запросов, дополнительные данные - это что-то вроде информации об устройстве или информации о местоположении. В настоящее время мы используем пользовательские заголовки http для этой информации, но пользовательский заголовок заставит браузер отправлять запрос перед полетом до реального HTTP-запроса, поэтому мы хотим удалить запрос предпросмотра для соображений производительности. Сначала мы рассмотрели использование файла cookie, но поскольку запрос является междоменным, мы не можем установить cookie для домена нашего API с помощью javascript. Тогда я искал документы, согласно Mozilla docs:Почему запрос предварительно задан, если я добавляю стандартный HTTP-заголовок при использовании cors?

В частности, запрос preflighted если:

Он использует отличные от GET, HEAD или POST методы. Кроме того, если POST используется для отправки данных запроса с Content-Type, отличным от application/x-www-form-urlencoded, multipart/form-data или text/plain, , например. если POST-запрос отправляет XML-полезную нагрузку на сервер с помощью приложения application/xml или text/xml, тогда запрос предваряется.

Он устанавливает собственные заголовки в запросе (например, запрос использует заголовок , такие как X-PINGOTHER)

Так что я подумал, что если я использую standard http header, который редко используется: «От» заголовка, он не будет инициировать запрос параметров. но после того, как я проверил это, я обнаружил, что ошибаюсь, заголовок «От» все еще вызывает запрос параметров.

Поэтому у меня есть два вопроса:

  1. Почему стандартный заголовок HTTP инициирует предполетной запрос?
  2. Как отправить дополнительную информацию без запуска запроса предполетной проверки?

Любая помощь будет оценена по достоинству.

+0

для части 'why', проверьте это: http://stackoverflow.com/a/16945321/550618 – regilero

ответ

3

Прочитайте выше часть той же самой странице о том, что представляет собой «простой запрос», который не нужно быть preflighted:

Помимо заголовков, установленных автоматически агента пользователя (например, Connection, User-Agent и т.д.), только заголовки, которым разрешено быть установлены вручную являются

  • Accept
  • Accept-Language
  • Content-Language
  • Content-Type

«пользовательские заголовки» не означает «нестандартные заголовки», это означает, что любой заголовок автоматически не установлен в браузере, кроме тех, четыре.