1. ホーム
  2. php

[解決済み] PHPのHTTP_HOSTとSERVER_NAMEの違いは何ですか?

2022-03-17 09:06:10

質問

とはどのような違いがあるのでしょうか? $_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME'] をPHPで作成することはできますか?

どのような場合にどちらを使うか、またその理由は何ですか?

どのように解決するのですか?

その HTTP_HOST が取得されます。 HTTPリクエストヘッダ であり、これはクライアントが実際にリクエストの "ターゲットホスト" として使用したものである。また SERVER_NAME はサーバー構成で定義します。どちらを使うかは、それを何に使うかによります。しかし、一方はクライアントが管理する値であり、ビジネスロジックで使用するには信頼性が低いこと、もう一方はサーバーが管理する値であり、信頼性が高いことを理解する必要があります。しかし、ウェブサーバがそのような値に対して SERVER_NAME を正しく設定します。Apache HTTPDを例にとると、以下のようになります。 ドキュメント :

ない場合 ServerName が指定された場合、サーバーはIPアドレスの逆引きを行ってホスト名を推測しようとします。でポートが指定されていない場合は ServerName の場合、サーバーは受信リクエストのポートを使用します。最適な信頼性と予測性のために、ホスト名とポートを明示的に指定するには ServerName ディレクティブを使用します。


更新情報 : 確認後 あなたの質問に対するPekkaの回答 へのリンクが含まれています。 ボビンスさんの回答 そのPHPは常に HTTP_HOST の値は SERVER_NAME そこで、Windows XP上の現在のXAMPP環境(Apache HTTPD 2.2.1 with PHP 5.2.8)を埃を飛ばしながら起動し、両方の値を表示するPHPページを作成し、Javaテスト・アプリケーションで URLConnection を修正するために Host ヘッダを作成し、テストしたところ、確かに(間違って)そうであることを教えられました。

最初にPHPを疑って、いくつか調べてから PHPバグレポート この件に関して、問題の根本は使用するウェブサーバーにあることを知りました。 Host ヘッダが SERVER_NAME が要求されました。そこで私は Apache HTTPD のバグレポート を使って 各種キーワード を発見しました。 関連バグ . この動作は、Apache HTTPD 1.3あたりから導入されています。を設定する必要があります。 UseCanonicalName ディレクティブを on の中に <VirtualHost> のエントリは ServerNamehttpd.conf (の下にある警告も確認してください)。 ドキュメント !).

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

これは私の場合、うまくいきました。

まとめてみました。 SERVER_NAME の方が信頼性が高いのですが、あなたは 依存 サーバーの設定に依存します。