standard protocol http http-headers

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



http reference (5)

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 (los estoy mirando, IE) que las mayúsculas en cada una de las palabras tienden a ser las mejores:

Location: http://stackoverflow.com Content-Type: text/plain

vs

location: http://stackoverflow.com content-type: text/plain

Este no es el estándar "HTTP", pero solo uno de los caprichos del navegador, nosotros como desarrolladores, tenemos que pensar.

En una publicación de blog, uso 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 que dice que content-type debe estar en mayúsculas, Content-type . ¿Es esto correcto? Parece funcionar para mí en minúsculas, y asumí que los encabezados HTTP no distinguen entre mayúsculas y minúsculas. ¿O simplemente funciona porque los navegadores son agradables?


Los nombres de encabezado 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 los campos no distinguen entre mayúsculas y minúsculas.

(Los valores de campo pueden o no distinguirse entre mayúsculas y minúsculas).

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

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

5.1.1 Método

El token de método indica el método a realizar en el
Recurso identificado por el URI-Solicitud. El método distingue entre 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



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

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

La única diferencia es la capital ''T''.


tldr; Tanto los encabezados HTTP / 1.1 como HTTP / 2 distinguen entre mayúsculas y minúsculas.

Según RFC 7230 (HTTP / 1.1):

Cada campo de encabezado consta de un nombre de campo que no distingue entre mayúsculas y minúsculas seguido de dos puntos (":"), espacios en blanco iniciales opcionales, el valor del campo y espacios en blanco finales opcionales.

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

Además, RFC 7540 (HTTP / 2):

Al igual que en HTTP / 1.x, los nombres de los campos de encabezado son cadenas de ASCII
Caracteres que se comparan de una manera que no distingue entre mayúsculas y minúsculas.

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