2012-06-06 11 views
7

La variabile server HTTP_HOST è sempre definita per tutti i server oppure, ad esempio, in IIS è definita con un altro nome o addirittura non è stata definita?La variabile server HTTP_HOST è sempre definita?

Inoltre, tale valore è sempre definito? O qualche host non lo definiscono? C'è un altro modo per recuperare quel valore?

risposta

7

Citando il manuale

HTTP_HOST è

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

HTTP_HOST è una parte della richiesta HTTP del cliente e specifica quale nome host la richiesta è di essere diretto a. se HTTP_HOST non è impostato, il client è molto, molto vecchio (HTTP 1.0 non supporta HTTP_HOST) o ha inoltrato una richiesta direttamente all'IP del tuo sito web.

penso che il Host HTTP Header è obbligatoria dal HTTP 1.1

+0

Credi nella maggior parte dei casi che il $ _SERVER ['HTTP_HOST'] funzionerà? Perché creo uno script da condividere come risorse gratuite e verrà installato in molti server diversi. –

+0

Sei rock ... seriamente non ho potuto trovare una risposta semplice come questa ovunque. Cosa suggerisci di leggere per comprendere l'anatomia delle richieste/intestazioni http ... ecc.? –

+0

"** o ** ha fatto una richiesta direttamente all'IP del tuo sito web" - Questo non significa necessariamente che l'intestazione 'Host:' non è impostata - potrebbe semplicemente essere impostata sull'indirizzo IP. – MrWhite

2

HTTP_HOST non è definito server, è

Contenuto del Host: colpo di testa da richiesta corrente, se c'è uno.

Quindi, dipende dal fatto che le informazioni di intestazione della richiesta contengano Host.

+0

Quindi la domanda successiva è un modo per ottenere sempre un valore indentical per HTTP_HOST? –

+2

Su IIS è possibile utilizzare SERVER_NAME come fallback. Su Apache la stessa variabile può essere o non essere disponibile (si veda la direttiva ['ServerName'] (http://httpd.apache.org/docs/2.0/mod/core.html#servername) in httpd.conf). –

2

Non è sempre definito.

Come indicato sopra, viene definito solo se è presente una richiesta http. Se stai eseguendo lo script php da CLI (ad esempio php nomefile.php) la chiave HTTP_HOST non verrà impostata.

Inoltre, è necessario notare che il HTTP_HOST è definito dal client, quindi è molto facile falsificarlo e non è affidabile. È preferibile affidarsi a qualcosa come SERVER_NAME.

Se si utilizza PHP> = 5.3.0 quindi si dovrebbe utilizzare

gethostname(); 

Check here per la documentazione.

Se si utilizza PHP> = 4.2.0 & PHP 5.3.0 < poi

php_uname('n'); 

farà lo stesso lavoro.

+0

'gethostname()' restituisce il "nome host per la macchina locale" che non è necessariamente la stessa cosa che verrebbe altrimenti restituita da 'HTTP_HOST' - specialmente se la stessa macchina sta servendo più di un sito. "get_uname ('n')' "dovrebbe essere' php_uname ('n') '. – MrWhite

Problemi correlati