PHP の$_SERVER['HTTP_HOST']
との違いは何ですか?$_SERVER['SERVER_NAME']
どちらを使用するかを検討するのはどのような場合ですか。またその理由は何ですか。
ベストアンサー1
はHTTP_HOST
、HTTPリクエストヘッダーこれは、クライアントがリクエストの「ターゲット ホスト」として実際に使用したものです。 はSERVER_NAME
サーバー構成で定義されます。 どちらを使用するかは、何にそれを必要とするかによって異なります。 ただし、1 つはクライアントが制御する値であるため、ビジネス ロジックで使用するには信頼性が低い可能性があり、もう 1 つはサーバーが制御する値であるため、信頼性が高いことに留意してください。 ただし、問題の Web サーバーが をSERVER_NAME
正しく構成していることを確認する必要があります。 Apache HTTPD を例にとると、次の抜粋は次のようになります。その文書:
が指定されていない場合
ServerName
、サーバーは IP アドレスの逆引きを実行してホスト名を推測しようとします。 でポートが指定されていない場合、ServerName
サーバーは受信リクエストのポートを使用します。信頼性と予測可能性を最大限に高めるには、 ディレクティブを使用して明示的なホスト名とポートを指定する必要がありますServerName
。
更新:確認後あなたの質問に対するペッカの答えへのリンクが含まれていますbobinceの回答PHP はHTTP_HOST
に対して常に の値を返すSERVER_NAME
という、数年前の私自身の PHP 4.x + Apache HTTPD 1.2.x の経験に反する情報を得たので、Windows XP 上の現在の XAMPP 環境 (Apache HTTPD 2.2.1 と PHP 5.2.8) からほこりを払い、それを起動し、両方の値を出力する PHP ページを作成し、URLConnection
ヘッダーとテストを変更したところ、Host
これが実際に(誤って)当てはまることがわかりました。
最初にPHPを疑い、少し調べてみたところ、PHP バグレポートこの件に関して、問題の根本は使用されているウェブサーバーにあり、リクエストされたHost
ときにHTTPヘッダーが誤って返されていたことがわかりました。そこで、SERVER_NAME
Apache HTTPD バグレポート使用してさまざまなキーワードこの件に関して、私はついに関連するバグこの動作はApache HTTPD 1.3あたりから導入されました。UseCanonicalName
のエントリon
の指示に従ってください(また、の下部にある警告を確認してください)<VirtualHost>
ServerName
httpd.conf
文書!)。
<VirtualHost *>
ServerName example.com
UseCanonicalName on
</VirtualHost>
これは私にとってはうまくいきました。
要約すると、SERVER_NAME
信頼性は高くなりますが、サーバーの構成に依存します。