2012-06-06 24 views
7

¿La variable del servidor HTTP_HOST está siempre definida para todos los servidores o, por ejemplo, en IIS está definida con otro nombre o incluso no está definida en absoluto?¿La variable del servidor HTTP_HOST está siempre definida?

Además, ese valor siempre se define? O algún host, ¿no definen ese valor? ¿Hay alguna otra manera de recuperar ese valor?

Respuesta

7

Citando el manual

HTTP_HOST es

Contents of the Host: header from the current request, if there is one.

HTTP_HOST es una parte de la solicitud HTTP del cliente y especifica qué nombre de host de la solicitud debe ser dirigida a. si HTTP_HOST no está configurado, el cliente es muy, muy antiguo (HTTP 1.0 no es compatible con HTTP_HOST) o ha realizado una solicitud directamente a la IP de su sitio web.

creo que el host de encabezado HTTP es obligatorio desde el HTTP 1.1

+0

¿Cree que en la mayoría de los casos el $ _SERVER ['HTTP_HOST'] funcionará? Porque creo una secuencia de comandos para compartirla como recursos gratuitos y la instalaré en muchos servidores diferentes –

+0

Me gusta ... en serio, no pude encontrar una respuesta simple como esta en cualquier parte. ¿Qué sugieres que leas para comprender la anatomía de las solicitudes/encabezados http ... etc.? –

+0

"** o ** ha realizado una solicitud directamente al IP de su sitio web". Esto no significa necesariamente que el encabezado 'Host:' no esté configurado; simplemente podría establecerse en la dirección IP. – MrWhite

2

HTTP_HOST no se define por el servidor, es

El contenido de la cabecera Host: de la petición actual, si hay uno .

Por lo tanto, depende de si la información del encabezado de su solicitud contiene Host.

+0

¿Entonces la siguiente pregunta, es una forma de obtener siempre un valor idéntico a HTTP_HOST? –

+2

En IIS, puede usar SERVER_NAME como alternativa. En Apache, la misma variable puede o no estar disponible (consulte la directiva ['ServerName'] (http://httpd.apache.org/docs/2.0/mod/core.html#servername) en httpd.conf). –

2

No siempre se define.

Como se mencionó anteriormente, solo se define si hay una solicitud http. Si está ejecutando el script php desde CLI (por ejemplo, php filename.php), no se establecerá la clave HTTP_HOST.

Además, debe tener en cuenta que HTTP_HOST es definido por el cliente, por lo que es bastante fácil simularlo y no es confiable. Deberías confiar en algo como SERVER_NAME.

Si está usando PHP> = 5.3.0, entonces debería usar

gethostname(); 

Es posible comprobar here para la documentación.

Si está usando PHP> = 4.2.0 & PHP 5.3.0 < continuación

php_uname('n'); 

va a hacer el mismo trabajo.

+0

'gethostname()' devuelve el "nombre de host para la máquina local" que no es necesariamente lo mismo que de otra manera sería devuelto por 'HTTP_HOST', especialmente si la misma máquina está sirviendo en más de un sitio. "' get_uname ('n') '" debe ser 'php_uname ('n')'. – MrWhite

Cuestiones relacionadas