Czy kolejność nagłówków w odpowiedzi HTTP ma kiedykolwiek znaczenie?

Czy kiedykolwiek ma znaczenie, czy kolejność nagłówków jest

A: 1
B: 2

Vs

B:2
A:1

Próbuję dowiedzieć się, czy mogę użyć słownika do przechowywania listy nagłówków lub czy musi to być jakaś lista lub uporządkowany słownik.

Author: Josh Gibson, 2009-04-15

5 answers

Nie, to nie ma znaczenia dla nagłówków o różnych nazwach. Patrz RFC 2616 , Sekcja 4.2:

Kolejność w jakiej nagłówki pól o różnych nazwach pól są otrzymany nie jest znaczący. Jednak" dobrą praktyką " jest wysyłanie ogólne-pola nagłówka najpierw, a następnie request-header lub response- pola nagłówka i kończące się polami nagłówka encji.

Ma to jednak znaczenie dla wielu nagłówków o tej samej nazwie:

Wiele pól nagłówka wiadomości o tej samej nazwie może być przedstawić w wiadomości wtedy i tylko wtedy, gdy całe pole-wartość dla tego pole nagłówka jest zdefiniowane jako lista rozdzielana przecinkami [tzn. #(wartości)]. Musi być możliwe łączenie wielu pól nagłówka w jedno para "field-name: field-value", bez zmiany semantyki wiadomości, poprzez dołączenie każdej kolejnej wartości pola do pierwszej, każdej oddzielone przecinkiem. Kolejność w jakiej pola nagłówka z tym samym Nazwa pola jest zatem istotna dla interpretacja połączonej wartości pola, a więc proxy nie może Zmień kolejność tych wartości pól, gdy wiadomość jest przekazywana.

 59
Author: Adam Rosenfield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-15 04:44:48

Kolejność nagłówków nie powinna mieć znaczenia. Mogą być "słabsze" implementacje standardu HTTP, gdzie kolejność ma znaczenie, ale ogólnie nie powinno.

Oto link opisujący nagłówki HTTP:

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

 6
Author: Andy White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-15 04:45:02

Nagłówki HTTP są niezależne od siebie i możesz użyć słownika do ich przechowywania bez martwienia się o ich kolejność.

 2
Author: Kirtan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-15 04:42:57

Może mieć to również znaczenie przy kilkukrotnym określeniu set-cookie dla tego samego pliku cookie:

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

W tym przypadku COOKIE1 zostanie ustawione na VALUE2, a jeśli kolejność zostanie zmieniona:

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

COOKIE1 zostanie ustawione na VALUE1

 0
Author: eLRuLL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-29 00:18:45

RFC 7230, sekcja 3.2.2: Field Order odnosi się konkretnie do tego pytania. Cytaty pochodzą z tej sekcji specyfikacji, z podkreśleniem dodanym przeze mnie:

Kolejność odbierania pól nagłówkowych o różnych nazwach pól jest nieistotna.

Dalej można to zakwalifikować notatką o dobrych praktykach dla dobra wydajności:

Dobrą praktyką jest jednak wysyłanie pól nagłówkowych zawierających najpierw kontroluj dane, takie jak Host na żądanie i data odpowiedzi, aby implementacje mogły zdecydować, kiedy nie obsłużyć wiadomości tak wcześnie, jak to możliwe.

W niektórych przypadkach dopuszczalne jest, aby wiadomość zawierała wiele pól nagłówka o tej samej nazwie. W tym przypadku porządek ma znaczenie.

Odbiorca może łączyć wiele pól nagłówka o tej samej nazwie w jedną parę "field-name: field-value", bez zmiany semantyki wiadomości, poprzez dodawanie każdej kolejnej wartości pola do połączonej wartości pola w kolejności oddzielonej przecinkiem. Kolejność odbierania pól nagłówka o tej samej nazwiejest zatem znacząca dla interpretacji łącznej wartości pola.

 0
Author: Chris Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 21:07:00