22

重複の可能性:
HTTP_HOST と SERVER_NAME

$_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME']??はどう違いますか?

4

3 に答える 3

45

$_SERVER['SERVER_NAME']ホスト構成で定義されているサーバー名の値を指定します (つまり、Apache の場合は Apache .conf ファイル)。

$_SERVER['HTTP_HOST']現在のリクエストが満たされているドメイン名を提供し、リクエストに直接関連しています。

HTTP_HOST通常、リクエストに直接関連するという点で、ほとんどのアプリケーションでより便利ですがSERVER_NAME、conf ファイルにある値を返すことができ、リクエストについては何も教えてくれません。

HTTP_HOSTとどのように異なるかの例を示しますSERVER_NAME。の ServerNamedomain.com と の IP アドレスを持つ Apache で定義されたホストがあるとします1.2.3.4

2 つの着信要求 URL を見て、これらの変数の違いを示します。

http://www.domain.com
HTTP_HOST = www.domain.com
SERVER_NAME = domain.com

http://1.2.3.4
HTTP_HOST = 1.2.3.4
SERVER_NAME = domain.com

繰り返しますが、HTTP_HOST はリクエストにより多く結び付けられていますが、SERVER_NAME はサーバー構成によって決定されます。

于 2012-12-08T00:24:43.143 に答える
2

HTTP_HOSTHost:クライアントから送信されたヘッダーです。その結果、信頼性が少し低下する可能性があります。 ユーザー入力に関係なく、SERVER_NAMEサーバーの構成によって決まります。

挙動の違いは微妙です。ここにいくつかの良い例が示されています: http://shiflett.org/blog/2006/mar/server-name-versus-http-host

ドキュメントはこれをよく説明しています

'SERVER_NAME' 現在のスクリプトが実行されているサーバー ホストの名前。スクリプトが仮想ホストで実行されている場合、これはその仮想ホストに対して定義された値になります。

'HTTP_HOST' 現在のリクエストの Host: ヘッダーの内容 (存在する場合)。

于 2012-12-08T00:02:21.637 に答える
0

HTTP_HOST

現在のリクエストの Host: ヘッダーの内容 (存在する場合)。

SERVER_NAME

現在のスクリプトが実行されているサーバー ホストの名前。スクリプトが仮想ホストで実行されている場合、これはその仮想ホストに対して定義された値になります。

http://php.net/manual/en/reserved.variables.server.php

于 2012-12-08T00:03:49.313 に答える