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
Los nombres de encabezado no distinguen entre mayúsculas y minúsculas.
De RFC 2616 - "Protocolo de transferencia de hipertexto - HTTP / 1.1" , Sección 4.2, "Cabeceras de mensajes" :
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.
La actualización del RFC 7230 no enumera los cambios del RFC 2616 en esta parte.
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.