2011-05-14 13 views
9

Según RFC 2616, que define HTTP/1.1, el encabezado Host: es obligatorio.¿Cuándo podría el encabezado del host HTTP ser indefinido?

Un cliente DEBE incluir un campo de encabezado de host en todos los mensajes de solicitud HTTP/1.1.

Pero el PHP manual implica que podría estar vacío:

'HTTP_HOST': El contenido de la cabecera Host: de la petición actual, si es que existe.

¿En qué situaciones podría este encabezado, y por lo tanto $_SERVER['HTTP_HOST'], estar vacío? ¿Podría mi aplicación depender de que esté allí?

+0

El encabezado 'Host:' sigue siendo 'obligatorio' según [HTTPbis] (http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-14#appendix-B.1.1) , pero eso no significa que siempre estará presente. Apache maneja su ausencia correctamente (aunque no alcanzará ningún vhost configurado). – mario

+0

@mario: ¿Hay clientes HTTP/1.1 reales en estado salvaje que no envían el encabezado 'Host:'? – Tim

+2

No los consideraría clientes reales, y ciertamente ninguno de los navegadores y bibliotecas contemporáneos lo hacen. Pero cualquier script PHP hecho a mano podría. Pero aún así, es principalmente un problema de configuración, no relevante para los fantasmas de Apache. HTTP_HOST es preseleccionado por Apache, y no me preocuparía que esté vacío en la práctica. Caso de borde poco probable. – mario

Respuesta

13

Puede estar vacío en HTTP 1.0. Si no se especifica ningún encabezado de host, el alojamiento virtual no funcionará en absoluto, por lo que se usará el vhost predeterminado en su servidor web.

Acabo de probar esto yo mismo; en PHP bajo Nginx, la variable $_SERVER['HTTP_HOST'] se configuró con el nombre del host virtual, que es _ en mi caso. Pero eso también depende de su configuración de fastcgi_params en Nginx.

En el alojamiento compartido esto no es importante ya que el vhost predeterminado se establecerá en una página de información de la empresa de alojamiento, por lo que su secuencia de comandos no se ejecutará. Sin embargo, podría ser algo bueno a tener en cuenta para su propio servidor.

+0

¿Qué se entiende por "HTTP_HOST"? $ http_host? –

+0

¡Buen trabajo para descubrir una respuesta de hace cuatro años! :-) No recuerdo este problema en absoluto, pero dado que he trabajado mucho con PHP, me refería a la variable PHP '$ _SERVER ['HTTP_HOST']', que probablemente se envió como un Nginx fastcgi_param. Ya no me queda ese archivo de configuración, pero leyendo [esto] (http://stackoverflow.com/a/15414811/238978) SO contesto que estoy bastante seguro de que podría haber sido la variable Nginx '$ host'. –

+0

¡Gracias por la respuesta! Luego, solo para dejarlo en claro porque es un poco confuso en la respuesta: nginx no establece '$ http_host' con el nombre del host virtual, sino que simplemente copia el campo de encabezado HTTP original" Host "en él. . Y si esto está vacío, como es '$ http_host'. –

6

Los rastreadores (por ejemplo, google), los raspadores o incluso los scripts perfectamente legales que interactúan con su API pueden omitir accidental o inconscientemente el encabezado Host.

He añadido esta respuesta porque esta pregunta surgió en google cuando busqué lo mismo.

Cuestiones relacionadas