PHP の HTTP_HOST と SERVER_NAME の違いは何ですか? 質問する

PHP の HTTP_HOST と SERVER_NAME の違いは何ですか? 質問する

PHP の$_SERVER['HTTP_HOST']との違いは何ですか?$_SERVER['SERVER_NAME']

どちらを使用するかを検討するのはどのような場合ですか。またその理由は何ですか。

ベストアンサー1

HTTP_HOSTHTTPリクエストヘッダーこれは、クライアントがリクエストの「ターゲット ホスト」として実際に使用したものです。 は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_NAMEApache HTTPD バグレポート使用してさまざまなキーワードこの件に関して、私はついに関連するバグこの動作はApache HTTPD 1.3あたりから導入されました。UseCanonicalNameのエントリonの指示に従ってください(また、の下部にある警告を確認してください)<VirtualHost>ServerNamehttpd.conf文書!)。

<VirtualHost *>
    ServerName example.com
    UseCanonicalName on
</VirtualHost> 

これは私にとってはうまくいきました。

要約すると、SERVER_NAME信頼性は高くなりますが、サーバーの構成に依存します。

おすすめ記事