Question Les en-têtes HTTP sont-ils sensibles à la casse?


Dans un article de blog, j'utilise le PHP suivant pour définir le type de contenu d'une réponse:

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

Je viens de faire un commentaire sur ce post en disant que content-type doit être capitalisé, Content-type. Est-ce correct? Cela semble fonctionner pour moi avec toutes les minuscules, et j'ai supposé que les en-têtes HTTP étaient insensibles à la casse. Ou ça marche simplement parce que les navigateurs sont sympas?


504
2018-03-10 11:22


origine


Réponses:


De RFC 2616 - "Protocole de transfert hypertexte - HTTP / 1.1", Section 4.2, "En-têtes de message":

Chaque champ d'en-tête consiste en un nom suivi d'un deux-points (":") et de la valeur du champ. Les noms de champs sont insensibles à la casse.

La mise à jour RFC 7230 ne répertorie aucun changements de RFC 2616 à cette partie.


692
2018-03-10 11:24



Les noms d'en-tête HTTP sont insensibles à la casse, selon RFC 2616:

4.2:

Chaque champ d'en-tête consiste en un nom suivi d'un deux-points (":") et de la valeur du champ. Les noms de champs sont insensibles à la casse.

(Champ valeurs peut ou peut ne pas être sensible à la casse.)

Si vous faites confiance aux principaux navigateurs, vous êtes prêt.


BTW, contrairement à la plupart des méthodes HTTP, des verbes sont sensible aux majuscules et minuscules:

5.1.1 Méthode

Le jeton Méthode indique le   méthode à effectuer sur le
  ressource identifiée par le   Demande-URI. La méthode est   sensible aux majuscules et minuscules.

   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

192
2018-03-10 11:27



tldr; les en-têtes HTTP / 1.1 et HTTP / 2 sont tous deux insensibles à la casse.

Selon RFC 7230 (HTTP / 1.1):

Chaque champ d'en-tête consiste en un nom de champ insensible à la casse   suivi d'un deux-points (":"), espace blanc facultatif, le champ   value, et les espaces de fin facultatifs.

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

Aussi, RFC 7540 (HTTP / 2):

Tout comme dans HTTP / 1.x, les noms des champs d'en-tête sont des chaînes ASCII
  caractères qui sont comparés d'une manière insensible à la casse.

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


16
2017-12-15 17:22



header('Content-type: image/png')  n'a pas fonctionné avec PHP 5.5 desservant IE11, comme dans le flux d'image a été montré comme texte

header('Content-Type: image/png')  travaillé, comme dans l'image est apparue comme une image

La seule différence est la capitale «T».


11
2017-12-02 09:27



Le RFC pour HTTP (comme cité ci-dessus) dicte que les en-têtes sont insensibles à la casse, cependant vous constaterez qu'avec certains navigateurs (je vous regarde, IE) que la capitalisation de chacun des mots a tendance à être meilleure:

Location: http://stackoverflow.com

Content-Type: text/plain

contre

location: http://stackoverflow.com

content-type: text/plain

Ce n'est pas une norme "HTTP", mais juste une autre des bizarreries du navigateur, nous en tant que développeurs, devons y penser.


0
2018-05-06 14:55