Имеет ли значение порядок заголовков в HTTP-ответе?


имеет ли смысл когда-либо порядок заголовков

A: 1
B: 2

vs

B:2
A:1

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

5 55

5 ответов:

нет, это не имеет значения для заголовков с разными именами. Смотрите RFC 2616, раздел 4.2:

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

Это имеет значение, однако, для нескольких заголовков с одним и тем же имя:

несколько полей заголовка сообщения с одним и тем же именем поля могут быть присутствует в сообщении тогда и только тогда, когда все поле-значение для этого поле заголовка определяется как разделенный запятыми список [т. е., #(значения)]. Должно быть возможно объединить несколько полей заголовка в одно пара "поле-Имя: поле-Значение", без изменения семантики сообщение, добавляя каждое последующее значение поля к первому, каждому через запятую. Этот порядок, в котором поля заголовка с тем же имя поля получено, поэтому имеет значение для интерпретация объединенного значения поля, а значит и прокси не должны измените порядок значений этих полей при пересылке сообщения.

порядок заголовков не имеет значения. Там могут быть" более слабые " реализации стандарта HTTP, где порядок имеет значение, но это не должно быть вообще.

вот ссылка, которая описывает заголовки HTTP:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2

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

он также может иметь значение при указании set-cookie несколько раз для одного и того же куки:

"Set-Cookie: COOKIE1=VALUE1; ...
"Set-Cookie: COOKIE1=VALUE2; ...

в этом случае COOKIE1 будет установлен в VALUE2, и если порядок изменен:

"Set-Cookie: COOKIE1=VALUE2; ...
"Set-Cookie: COOKIE1=VALUE1; ...

COOKIE1 будет установлен в VALUE1

RFC 7230, раздел 3.2.2: порядок полей решает этот вопрос конкретно. Цитаты здесь взяты из этого раздела спецификации, с акцентом, добавленным мной:

порядок, в котором поля заголовка С разными именами полей получено не имеет значения.

Он продолжает квалифицировать это с примечанием о хорошей практике ради производительности:

тем не менее, это рекомендуется сначала отправить поля заголовка, содержащие управляющие данные, такие как Host on requests и Date on responses, чтобы реализации могли решить, когда не обрабатывать сообщение как можно раньше.

в некоторых случаях допускается, чтобы сообщение содержало несколько полей заголовка с одинаковым именем. В этом случае порядок имеет значение.

получатель может объединить несколько полей заголовка с одинаковым именем Поля в одно " имя поля: пара "поле-Значение", без изменения семантики сообщения, путем добавления каждого последующего значения поля к объединенному значению поля в порядке, разделенном запятой. Порядок, в котором поля заголовка С тем же именем Поля не значит значительное к интерпретации объединенного значения поля.