type headers definicion data content chrome http http-headers

headers - ¿Qué es el encabezado de host http?



http request (3)

Dado que la conexión TCP ya está establecida cuando se envía la solicitud HTTP, la dirección IP y el puerto se conocen implícitamente: una conexión TCP es un puerto IP +. Entonces, ¿por qué necesitamos el encabezado Host ? ¿Es esto solo necesario para el caso en el que hay varios hosts asignados a la dirección IP implícita en la conexión TCP?


El encabezado del host le dice al servidor web qué host virtual usar (si está configurado). Incluso puede tener el mismo host virtual utilizando varios alias (= dominios y dominios comodín). En este caso, aún tiene la posibilidad de leer ese encabezado manualmente en su aplicación web si desea proporcionar un comportamiento diferente en función de los diferentes dominios tratados. Esto es posible porque en su servidor web puede (y si no me equivoco, debe) configurar un vhost para que sea el host predeterminado. Este vhost predeterminado se usa cuando el encabezado del host no coincide con ninguno de los hosts virtuales configurados.

Eso significa: lo hace bien, aunque decir "varios hosts" puede ser algo engañoso: el host (la máquina direccionada) es el mismo, lo que realmente se resuelve en la dirección IP son diferentes nombres de dominio (incluidos los subdominios) que también se refieren como nombres de host (¡pero no como hosts!).

Aunque no es parte de la pregunta, un hecho divertido: esta especificación condujo a problemas con SSL en los primeros días porque el servidor web tiene que entregar el certificado que corresponde al dominio que el cliente ha abordado. Sin embargo, para saber qué certificado usar, el servidor web debería haber conocido el nombre de host direccionado de antemano. Pero debido a que el cliente envía esa información solo a través del canal encriptado (lo que significa: después de que el certificado ya ha sido enviado), el servidor tuvo que asumir que examinó el host predeterminado. Eso significaba un dominio con seguridad SSL por combinación de dirección IP / puerto.

Esto se ha superado con la Indicación del nombre del servidor ; sin embargo, eso nuevamente rompe algo de privacidad, ya que el nombre del servidor ahora se transfiere nuevamente en texto plano, por lo que cada hombre en el medio vería a qué nombre de host está tratando de conectarse.

Aunque el servidor web conocería el nombre de host de la Indicación del nombre del servidor, el encabezado del host no está obsoleto, porque la información de la Indicación del nombre del servidor solo se usa dentro del protocolo de enlace TLS. Con una conexión no segura, no hay ninguna indicación de nombre de servidor, por lo que el encabezado del host sigue siendo válido (y necesario).

Otro dato divertido: la mayoría de los servidores web (si no todos) rechazan su solicitud http si no contiene exactamente un encabezado de host , incluso si pudiera omitirse porque solo está configurado el vhost predeterminado. Eso significa que la información mínima requerida en una solicitud http- (get-) es la primera línea que contiene el RESOURCE METHOD y la PROTOCOL VERSION RESOURCE PROTOCOL VERSION y al menos el encabezado del host , como este:

GET /someresource.html HTTP/1.1 Host: www.example.com

Es posible que desee leer la documentación de MDN en el encabezado del host para obtener más información, que dice

Se debe enviar un campo de encabezado de host en todos los mensajes de solicitud HTTP / 1.1. Se enviará un código de estado 400 (Solicitud incorrecta) a cualquier mensaje de solicitud HTTP / 1.1 que carezca de un campo de encabezado de Host o que contenga más de uno.

Como mencionó Darrel Miller, las especificaciones completas se pueden encontrar en RFC7230 .


HTTP 1.1, un encabezado de host es una tercera información que puede usar además de la dirección IP y el número de puerto para identificar de forma exclusiva un dominio web o, como Microsoft lo llama, un servidor de aplicaciones. Por ejemplo, el nombre del encabezado del host para la URL www.example.com es www.example.com. Un navegador HTML 3.0 o posterior es compatible con HTTP 1.1. El navegador incluye el nombre del encabezado de host que especificó en el campo de ubicación del encabezado de solicitud que el navegador envía al servidor. Si no especifica un nombre de encabezado de host en el encabezado de la solicitud, el dominio web raíz actúa como el servidor web predeterminado.


Siempre recomendaría ir a la fuente autorizada cuando intente comprender el significado y el propósito de los encabezados HTTP.

El campo de encabezado "Host" en una solicitud proporciona el host y el puerto
información del URI de destino, lo que permite que el servidor de origen
distinguir entre recursos mientras atiende solicitudes de múltiples
nombres de host en una sola dirección IP.

RFC7230