Важен ли порядок заголовков веб-запросов?
Я делаю 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-заголовков. Таким образом, порядок заголовка не имеет значения.