Pregunta ¿Los encabezados HTTP distinguen entre mayúsculas y minúsculas?


En una publicación de blog utilizo el siguiente PHP para establecer el tipo de contenido de una respuesta:

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

Acabo de recibir un comentario en esa publicación diciendo que content-type necesita ser capitalizado, Content-type. ¿Es esto correcto? Parece que funciona para mí con todas las minúsculas, y asumí que los encabezados HTTP no distinguen entre mayúsculas y minúsculas. ¿O simplemente funciona porque los navegadores son agradables?


504
2018-03-10 11:22


origen


Respuestas:


De RFC 2616 - "Protocolo de transferencia de hipertexto - HTTP / 1.1", Sección 4.2, "Encabezados de mensaje":

Cada campo de encabezado consta de un nombre seguido de dos puntos (":") y el valor del campo. Los nombres de campo no distinguen entre mayúsculas y minúsculas.

La actualización RFC 7230 no incluye ninguna cambios de RFC 2616 en esta parte.


692
2018-03-10 11:24



Los nombres de los encabezados HTTP no distinguen entre mayúsculas y minúsculas, de acuerdo con RFC 2616:

4.2:

Cada campo de encabezado consta de un nombre seguido de dos puntos (":") y el valor del campo. Los nombres de campo no distinguen entre mayúsculas y minúsculas.

(Campo valores puede o no ser sensible a mayúsculas y minúsculas).

Si confías en los principales navegadores para cumplir con esto, ya estás listo.


Por cierto, a diferencia de la mayoría de los métodos HTTP (verbos) son distingue mayúsculas y minúsculas:

5.1.1 Método

El token de Método indica el   método que se realizará en el
  recurso identificado por el   Request-URI. El método es   distingue mayúsculas y minúsculas.

   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; los encabezados HTTP / 1.1 y HTTP / 2 no distinguen entre mayúsculas y minúsculas.

De acuerdo a RFC 7230 (HTTP / 1.1):

Cada campo de encabezado consta de un nombre de campo insensible a mayúsculas y minúsculas   seguido de dos puntos (":"), espacio en blanco inicial opcional, el campo   valor, y espacio en blanco posterior opcional.

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

También, RFC 7540 (HTTP / 2):

Al igual que en HTTP / 1.x, los nombres de los campos de encabezado son cadenas de ASCII
  personajes que se comparan de una manera insensible a mayúsculas y minúsculas.

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


16
2017-12-15 17:22



header('Content-type: image/png')  no funcionó con PHP 5.5 que sirve IE11, ya que en la secuencia de imagen se mostraba como texto

header('Content-Type: image/png')  trabajado, como en la imagen apareció como una imagen

La única diferencia es la capital 'T'.


11
2017-12-02 09:27



El RFC para HTTP (como se citó anteriormente) dicta que los encabezados no distinguen entre mayúsculas y minúsculas, sin embargo, encontrará que con ciertos navegadores (le estoy mirando, IE) que capitalizar cada una de las palabras tiende a ser mejor:

Location: http://stackoverflow.com

Content-Type: text/plain

vs

location: http://stackoverflow.com

content-type: text/plain

Esto no es un estándar "HTTP", sino simplemente otra de las peculiaridades del navegador, nosotros como desarrolladores, tenemos que pensar.


0
2018-05-06 14:55