Важен ли порядок заголовков веб-запросов?

Я делаю POST-запрос, чтобы загрузить картинку на сайт.
На странице есть один FileUpload и один input(textBox) и в Fiddler я обнаружил, что страница отправляет некоторые данные, используя режим запроса Multipart Post (Content Disposition: multipart-formdata;)
Кажется, все в порядке, потому что в fiddler все то же самое в отношении того, что публикует мое приложение и что отправляет страница... Только не в порядке заголовков...

Мой вопрос заключается в том, действительно ли важно правильно размещать заголовки? и если да, как я могу это сделать? (так как мы просто устанавливаем некоторые свойства в запросе, нет места для установки порядка...)

спасибо за любой совет...

3 ответа

Решение

Порядок заголовков HTTP не имеет значения для заголовков с разными именами. Однако, если существует несколько заголовков с одинаковым именем, порядок важен.

См. RFC 2616

Порядок получения полей заголовков с разными именами не имеет значения. Тем не менее, это "хорошая практика" - сначала отправлять поля общего заголовка, затем поля заголовка запроса или заголовка ответа и заканчивать полями заголовка объекта.

Несколько полей заголовка сообщения с одним и тем же именем поля МОГУТ присутствовать в сообщении тогда и только тогда, когда все значение поля для этого поля заголовка определено как список, разделенный запятыми [т.е. #(значения)]. ДОЛЖНО быть возможно объединить несколько полей заголовка в одну пару "имя-поля: поле-значение", не изменяя семантику сообщения, добавляя каждое последующее значение поля к первому, каждое из которых разделяется запятой. Порядок, в котором принимаются поля заголовка с одинаковым именем поля, поэтому важен для интерпретации объединенного значения поля, и, следовательно, прокси-сервер НЕ ДОЛЖЕН изменять порядок этих значений поля при пересылке сообщения.

Akamai заблокирует вас, если у вас неправильный порядок.

$ curl -v -H "$UA" -H "$ACCEPT" -H "$ENCODING" $URL |& grep '< HTTP'
< HTTP/1.1 403 Forbidden
$ curl -v -H "$ACCEPT" -H "$UA" -H "$ENCODING" $URL |& grep '< HTTP'
< HTTP/1.1 301 Moved Permanently

Они используют неявное упорядочение определенных клиентов для обнаружения вредоносных пользовательских агентов. Смотрите мой блог в теме:

http://gwillem.gitlab.io/2017/05/02/http-header-order-is-important/

Мой опыт работы с API Chrome webRequest никогда не гарантирует порядок HTTP-заголовков. Таким образом, порядок заголовка не имеет значения.

Другие вопросы по тегам