Подтвердить что ты не робот

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

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

A: 1
B: 2

против

B:2
A:1

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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