Czy w nagłówkach HTTP rozróżnia się wielkość liter?

W poście na blogu używam następującego PHP, aby ustawić content-type odpowiedzi:

header('content-type: application/json; charset=utf-8');

Właśnie dostałem komentarz do tego posta mówiący, że content-type musi być pisane wielkimi literami, Content-type. Czy to prawda? Wydaje się, że działa dla mnie ze wszystkimi małymi literami i założyłem, że nagłówki HTTP były niewrażliwe na wielkość liter. A może po prostu działa, bo przeglądarki są ładne?

Author: Svish, 2011-03-10

5 answers

Nazwy nagłówków nie uwzględniają wielkości liter.

From RFC 2616 - "Hypertext Transfer Protocol -- HTTP/1.1", Sekcja 4.2, "nagłówki wiadomości":

Każde pole nagłówka składa się z nazwy, po której następuje dwukropek (":") i wartość pola. Nazwy pól są niewrażliwe na wielkość liter.

Aktualizacja RFC 7230 nie wymienia żadnych zmian z RFC 2616 w tej części.

 712
Author: Ignacio Vazquez-Abrams,
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-08-10 22:56:30

Nazwy nagłówków HTTP są niewrażliwe na wielkość liter, zgodnie z RFC 2616:

4.2:

Każde pole nagłówka składa się z nazwy, po której następuje dwukropek (":") i wartość pola. Nazwy pól są niewrażliwe na wielkość liter.

(pole wartości mogą, ale nie muszą, uwzględniać wielkość liter.)

Jeśli ufasz głównym przeglądarkom, że tego przestrzegają, jesteś gotowy.


BTW, w przeciwieństwie do większości HTTP, metody (czasowniki) rozróżnia wielkość liter:

5.1.1 Metoda

Token metody wskazuje metoda do wykonania na
zasób zidentyfikowany przez Prośba-URI. Metoda jest rozróżnianie wielkości liter.

   Method         = "OPTIONS"                ; Section 9.2
                  | "GET"                    ; Section 9.3
                  | "HEAD"                   ; Section 9.4
                  | "POST"                   ; Section 9.5
                  | "PUT"                    ; Section 9.6
                  | "DELETE"                 ; Section 9.7
                  | "TRACE"                  ; Section 9.8
                  | "CONNECT"                ; Section 9.9
                  | extension-method
   extension-method = token
 197
Author: Lightness Races in Orbit,
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
2012-12-13 16:33:57

Tldr; zarówno nagłówki HTTP / 1.1, jak i HTTP / 2 są niewrażliwe na wielkość liter.

Zgodnie z RFC 7230 (HTTP / 1.1):

Każde pole nagłówka składa się z nazwy pola bez rozróżniania wielkości liter po którym następuje dwukropek ( " :"), opcjonalne początkowe spacje, pole wartość i opcjonalne końcowe spacje.

Https://tools.ietf.org/html/rfc7230#section-3.2

Również, RFC 7540 (HTTP / 2):

Tak jak w HTTP / 1.x, nagłówek nazwy pól są ciągami znaków ASCII
znaki, które są porównywane w sposób niewrażliwy na wielkość liter.

Https://tools.ietf.org/html/rfc7540#section-8.1.2

 20
Author: Afshin Mehrabani,
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
2016-12-15 17:22:51

header('Content-type: image/png') nie działa z PHP 5.5 obsługującym IE11, ponieważ w strumieniu obrazu był wyświetlany jako tekst

header('Content-Type: image/png') pracował, jak na obrazie pojawił się jako obraz

Jedyną różnicą jest duże "T".

 12
Author: Rudiger W.,
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-12-02 09:27:57

RFC dla HTTP (jak wspomniano powyżej) nakazuje, że nagłówki są niewrażliwe na wielkość liter, jednak w niektórych przeglądarkach (patrzę na Ciebie, IE), że pisanie wielkimi literami każdego ze słów wydaje się być najlepsze:

Location: http://stackoverflow.com

Content-Type: text/plain

Vs

location: http://stackoverflow.com

content-type: text/plain

To nie jest standard "HTTP", ale po prostu kolejny z dziwactw przeglądarki, my jako programiści, musimy myśleć.

 1
Author: Robert Lerner,
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
2016-05-06 14:55:03