wake-up-neo.com

Sind bei HTTP-Headern Groß- und Kleinschreibung zu beachten?

In einem Blog-Beitrag verwende ich das folgende PHP, um den Inhaltstyp einer Antwort festzulegen:

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

Ich habe gerade einen Kommentar zu diesem Beitrag erhalten, der besagt, dass content-type groß geschrieben werden muss, Content-type. Ist das richtig? Es scheint für mich mit Kleinbuchstaben zu funktionieren, und ich nahm an, dass bei den HTTP-Headern die Groß- und Kleinschreibung nicht beachtet wird. Oder funktioniert es nur, weil Browser nett sind?

613
Svish

Kopfzeilennamen unterscheiden nicht zwischen Groß- und Kleinschreibung.

From RFC 2616 - "Hypertext Transfer Protocol - HTTP/1.1" , Abschnitt 4.2, "Nachrichtenkopfzeilen" :

Jedes Headerfeld besteht aus einem Namen, gefolgt von einem Doppelpunkt (":") und dem Feldwert. Bei Feldnamen wird zwischen Groß- und Kleinschreibung unterschieden .

Der aktualisierte RFC 7230 listet an dieser Stelle kein Änderungen gegenüber RFC 2616 auf.

820

Bei den HTTP-Headernamen wird nach RFC 2616 die Groß- und Kleinschreibung nicht berücksichtigt.

4.2:

Jedes Headerfeld besteht aus einem Namen, gefolgt von einem Doppelpunkt (":") und dem Feldwert. Bei Feldnamen wird die Groß- und Kleinschreibung nicht berücksichtigt.

(Feldwerte können zwischen Groß- und Kleinschreibung unterscheiden.)

Wenn Sie darauf vertrauen, dass die wichtigsten Browser dies einhalten, sind Sie bereit.


Im Gegensatz zu den meisten HTTP-Methoden wird bei Verben zwischen Groß- und Kleinschreibung unterschieden:

5.1.1 Methode

Das Methodentoken gibt die Methode an, die auf dem Server ausgeführt werden soll
Ressource, die durch den Request-URI identifiziert wird. Die Methode unterscheidet zwischen Groß- und Kleinschreibung.

   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

tldr; Bei HTTP/1.1- und HTTP/2-Headern wird die Groß- und Kleinschreibung nicht berücksichtigt.

Laut RFC 7230 (HTTP/1.1):

Jedes Header-Feld besteht aus einem Feldnamen, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, gefolgt von einem Doppelpunkt (":"), einem optionalen führenden Leerzeichen, dem Feldwert und einem optionalen nachfolgenden Leerzeichen.

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

RFC 7540 (HTTP/2):

Header-Feldnamen sind wie in HTTP/1.x ASCII-Zeichenfolgen
Zeichen, bei denen die Groß- und Kleinschreibung nicht beachtet wird.

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

31

header('Content-type: image/png') funktionierte nicht mit PHP 5.5 für IE11, da im Image-Stream als Text angezeigt wurde

header('Content-Type: image/png') funktionierte, als im Bild als Bild erschien

Einziger Unterschied ist das Kapital 'T'.

14
Rudiger W.

Der RFC für HTTP (wie oben zitiert) schreibt vor, dass bei den Headern die Groß- und Kleinschreibung nicht berücksichtigt wird. Bei bestimmten Browsern (ich sehe Sie an, IE) ist es jedoch am besten, jedes der Wörter in Groß- und Kleinschreibung zu schreiben:

Location: http://stackoverflow.com

Content-Type: text/plain

vs

location: http://stackoverflow.com

content-type: text/plain

Dies ist kein "HTTP" -Standard, sondern nur ein weiteres Manko des Browsers, über das wir als Entwickler nachdenken müssen.

4
Robert Lerner

Sie sind nicht case sensitive. Tatsächlich konvertiert der NodeJS-Webserver sie werden explizit konvertiert in Kleinbuchstaben, bevor sie im Anforderungsobjekt verfügbar gemacht werden.

Hierbei ist zu beachten, dass alle Header nur in Kleinbuchstaben dargestellt werden, unabhängig davon, wie der Client sie tatsächlich gesendet hat. Dies vereinfacht das Parsen von Headern für jeden Zweck.

3
jayarjo