HTTPQUERY
Español

Host

Uso

Toda solicitud HTTP/1.1 incluye una cabecera Host. Esta cabecera habilita el alojamiento virtual, en el que un único servidor con una sola dirección IP aloja varios dominios. Sin Host, el servidor no tiene forma de determinar a qué dominio pretendía llegar el cliente.

El valor contiene el nombre de host solicitado y un número de puerto opcional separado por dos puntos. Cuando no se especifica ningún puerto, se aplica el puerto predeterminado del esquema: el puerto 80 para HTTP y el puerto 443 para HTTPS.

Un servidor que recibe una solicitud HTTP/1.1 sin cabecera Host responde con 400 Bad Request. La misma respuesta se aplica cuando una solicitud contiene más de una cabecera Host, ya que la ambigüedad impide que el servidor seleccione el host virtual correcto.

En HTTP/2 y HTTP/3, el campo de pseudocabecera :authority sustituye a Host. Los clientes que envían solicitudes HTTP/2 o HTTP/3 colocan la información del host en :authority. Cuando una pasarela convierte una solicitud HTTP/2 a HTTP/1.1, genera la cabecera Host a partir del valor de :authority.

La cabecera Host difiere de la cabecera Origin. Host identifica el servidor de destino en cada solicitud. Origin identifica el origen de una solicitud de origen cruzado y aparece solo en contextos específicos, como las solicitudes de comprobación previa CORS y los envíos de formularios.

host

El nombre de dominio o la dirección IP del servidor de destino.

port

Un número de puerto TCP opcional. Cuando se omite, se asume el puerto predeterminado del esquema de la solicitud (80 para HTTP, 443 para HTTPS).

Host: <host>:<port>

Ejemplo

Una solicitud HTTPS estándar a un servidor web omite el puerto porque 443 es el predeterminado para HTTPS.

GET /articles/http-headers HTTP/1.1
Host: example.re

Cuando un servidor se ejecuta en un puerto no estándar, el número de puerto se incluye después del nombre de host.

GET /api/status HTTP/1.1
Host: api.example.re:8443

Una solicitud a una dirección IP incluye la dirección directamente. Esta forma es habitual en entornos de desarrollo y servicios internos.

GET /health HTTP/1.1
Host: 192.168.1.100:3000

Seguridad

La inyección en la cabecera Host se produce cuando las aplicaciones usan el valor de Host para generar URL (enlaces de restablecimiento de contraseña, URL canónicas, redirecciones) sin validar antes ese valor. Un atacante envía una solicitud con un valor de Host falsificado, lo que hace que la aplicación produzca enlaces que apuntan a un dominio controlado por el atacante.

Valide la cabecera Host contra una lista blanca de valores esperados. En nginx, defina server_name con un bloque server predeterminado de captura general que devuelva 444. En Django, establezca ALLOWED_HOSTS con la lista de dominios permitidos. En Rails, configure host_authorization en el entorno de la aplicación. Los navegadores tratan Host como una cabecera de solicitud prohibida, lo que impide que el JavaScript del lado del cliente modifique el valor, pero las solicitudes de servidor a servidor y herramientas como curl no tienen esa restricción.