2009-04-15 1 views
48

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

A: 1 
B: 2 

против

B:2 
A:1 

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

ответ

53

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

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

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

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

+0

ASP.net использует простой NameValueCollection для хранения заголовков ответов. – David

+1

Для нескольких заголовков с тем же именем важно ДАЖЕ БОЛЬШЕ, если оно не является законным для этого заголовка, чтобы появляться несколько раз, например. 'Content-Length' - разные серверы будут обрабатывать его по-другому. Например. один возьмет первый, один возьмет последний, а другой будет беспорядочно неопределенным. Поэтому, хотя это имеет значение, может быть не так много, что вы можете с этим поделать. – AviD

+0

(О, данг, только что заметил дату, когда вы разместили это ...!: -O Извините, я только что прошел через это сейчас ...) – AviD

2

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

+2

Неверно для нескольких случаев одного и того же заголовка. – Eddie

6

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

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

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

0

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

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

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

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

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

Смежные вопросы