Имеет ли значение порядок заголовков в HTTP-ответе?
имеет ли смысл когда-либо порядок заголовков
A: 1
B: 2
vs
B:2
A:1
Я пытаюсь выяснить, могу ли я использовать словарь для хранения списка заголовков или если это должен быть какой-то список или упорядоченный словарь.
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, чтобы реализации могли решить, когда не обрабатывать сообщение как можно раньше.
в некоторых случаях допускается, чтобы сообщение содержало несколько полей заголовка с одинаковым именем. В этом случае порядок имеет значение.
получатель может объединить несколько полей заголовка с одинаковым именем Поля в одно " имя поля: пара "поле-Значение", без изменения семантики сообщения, путем добавления каждого последующего значения поля к объединенному значению поля в порядке, разделенном запятой. Порядок, в котором поля заголовка С тем же именем Поля не значит значительное к интерпретации объединенного значения поля.