Имеет ли значение порядок заголовков в ответе HTTP? - PullRequest
59 голосов
/ 15 апреля 2009

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

A: 1
B: 2

против

B:2
A:1

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

Ответы [ 5 ]

64 голосов
/ 15 апреля 2009

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

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

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

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

7 голосов
/ 15 апреля 2009

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

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

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

2 голосов
/ 15 апреля 2009

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

1 голос
/ 29 августа 2015

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

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

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

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

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

0 голосов
/ 21 сентября 2018

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

Порядок получения полей заголовка с разными именами полей : несущественно .

Далее уточняется, что с пометкой о хорошей практике ради производительности:

Однако рекомендуется сначала отправлять поля заголовка, содержащие управляющие данные, такие как «Хост по запросам» и «Дата по ответам», чтобы реализации могли решить, когда не следует обрабатывать сообщение как можно раньше.

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

Получатель МОЖЕТ объединить несколько полей заголовка с одним и тем же именем поля в одну пару «field-name: field-value», не изменяя семантику сообщения, добавляя каждое последующее значение поля к объединенному значению поля по порядку, через запятую Порядок, в котором принимаются поля заголовка с тем же именем поля , поэтому значительный для интерпретации значения комбинированного поля.

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