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

dans un billet 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 recevoir un commentaire sur ce post disant que content-type doit être capitalisé, Content-type . Est-ce correct? Cela semble fonctionner pour moi avec tous les minuscules, et j'ai supposé que les en-têtes HTTP étaient insensibles à la casse. Ou est-ce que ça fonctionne juste parce que les navigateurs sont sympas?

521
demandé sur Svish 2011-03-10 14:22:16
la source

5 ответов

Les noms d'en-tête

ne sont pas sensibles à la casse.

From RFC 2616 - "Hypertext Transfer Protocol -- HTTP/1.1" , Section 4.2, "en-têtes de messages " :

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

la mise à jour RFC 7230 ne mentionne pas de changements par rapport à RFC 2616 à la présente partie.

712
répondu Ignacio Vazquez-Abrams 2018-08-11 01:56:30
la source

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

4.2:

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

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

si vous faites confiance aux principaux navigateurs pour vous y conformer, vous êtes tous ensemble.


BTW, contrairement à la plupart des méthodes HTTP, (verbes) sont sensible à la casse:

5.1.1 méthode

le symbole de la méthode indique méthode à appliquer sur la

ressource identifiée par le URI de demande. La méthode est sensible à la casse.

   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
répondu Lightness Races in Orbit 2012-12-13 20:33:57
la source

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

selon RFC 7230 (HTTP/1.1):

chaque champ d'en-tête est constitué d'un nom de champ non sensible à la casse. suivi d'un deux-points ( " :"), en option espace principal, le champ valeur, et espace de fuite optionnel.

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

Also, RFC 7540 (HTTP/2):

comme dans HTTP/1.x, les noms des champs d'en-tête sont des chaînes D'ASCII

des personnages qui sont comparés d'une manière insensible à la casse.

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

20
répondu Afshin Mehrabani 2016-12-15 20:22:51
la source

header('Content-type: image/png') ne fonctionnait pas avec PHP 5.5 servant 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 le " T " majuscule.

12
répondu Rudiger W. 2015-12-02 12:27:57
la source

le RFC pour HTTP (tel que cité ci-dessus) dicte que les en-têtes sont insensibles à la casse, cependant vous trouverez qu'avec certains navigateurs (je vous regarde, IE) que la capitalisation de chacun des mots tend à être le meilleur:

Location: http://stackoverflow.com

Content-Type: text/plain

vs

location: http://stackoverflow.com

content-type: text/plain

ce N'est pas la norme "HTTP", mais juste une autre des bizarreries du navigateur, nous en tant que développeurs, devons réfléchir.

1
répondu Robert Lerner 2016-05-06 17:55:03
la source

Autres questions sur http http-headers