2012-06-06 8 views
7

Ist die Servervariable HTTP_HOST immer für alle Server definiert oder ist sie beispielsweise in IIS mit einem anderen Namen definiert oder gar nicht definiert?Ist die Servervariable HTTP_HOST immer definiert?

Auch dieser Wert ist immer definiert? Oder einen Host, der diesen Wert nicht definiert? Gibt es eine andere Möglichkeit, diesen Wert abzurufen?

Antwort

7

den manuellen

HTTP_HOST Zitiert ist

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

HTTP_HOST ist ein Teil der HTTP-Anforderung des Clients und gibt an, welche Host-Namen die Anforderung gerichtet werden soll. Wenn HTTP_HOST nicht festgelegt ist, ist der Client entweder sehr, sehr alt (HTTP 1.0 unterstützt HTTP_HOST nicht) oder hat direkt eine Anfrage an die IP Ihrer Website gestellt.

ich denke, die Host-HTTP-Header ist obligatorisch, da HTTP 1.1

+0

Haben Sie in den meisten Fällen die $ _SERVER ['HTTP_HOST'] funktioniert? Weil ich ein Skript erstelle, das als freie Ressourcen freigegeben wird und in vielen verschiedenen Servern installiert wird. –

+0

Sie rocken ... ernsthaft, ich konnte nirgendwo eine einfache Antwort finden. Was empfehlen Sie zu lesen, um die Anatomie von http-Anfragen/Kopfzeilen zu verstehen? –

+0

"** oder ** hat eine Anfrage direkt an die IP Ihrer Website gestellt" - Dies bedeutet nicht notwendigerweise, dass der 'Host:' Header nicht gesetzt ist - er könnte einfach auf die IP-Adresse gesetzt werden. – MrWhite

2

HTTP_HOST vom Server nicht definiert ist, ist es

Inhalt des Host: Header der aktuellen Anforderung, wenn ist.

Es hängt also davon ab, ob die Header-Informationen Ihrer Anfrage Host enthalten.

+0

Also die nächste Frage, ist eine Möglichkeit, immer einen Wert zu bekommen, der zu HTTP_HOST identisch ist? –

+2

In IIS können Sie SERVER_NAME als Fallback verwenden. Auf Apache kann die gleiche Variable verfügbar sein oder nicht (siehe ['ServerName'] (http://httpd.apache.org/docs/2.0/mod/core.html#servername) Direktive in httpd.conf). –

2

Es ist nicht immer definiert.

Wie oben erwähnt, ist es nur definiert, wenn eine HTTP-Anfrage vorliegt. Wenn Sie das PHP-Skript über CLI ausführen (z. B. php filename.php), wird der Schlüssel HTTP_HOST nicht festgelegt.

Darüber hinaus sollten Sie beachten, dass HTTP_HOST vom Client definiert wird, so ist es ziemlich einfach, es zu fälschen und es ist nicht zuverlässig. Sie sollten sich lieber auf etwas wie SERVER_NAME verlassen.

Wenn Sie PHP verwenden> = 5.3.0, dann sollten Sie

gethostname(); 

verwenden Sie here für die Dokumentation überprüfen kann.

Wenn Sie PHP verwenden> = 4.2.0 & PHP < 5.3.0 dann

php_uname('n'); 

wird die gleiche Arbeit tun.

+0

'gethostname()' gibt den "Hostnamen für den lokalen Rechner" zurück, der nicht notwendigerweise der gleiche ist, der sonst von 'HTTP_HOST' zurückgegeben würde - insbesondere wenn derselbe Rechner mehr als einen Standort bedient. "' get_uname ('n') '" sollte 'php_uname ('n')' sein. – MrWhite

Verwandte Themen