ヘッダーHTTP_X_FORWARDED_FOR
は、プロキシサーバーによって設定され、プロキシを介してHTTP要求を行っているホストのIPアドレスを識別します。ヘッダーHTTP_CLIENT_IP
は同様の目的で設定されます。
HTTP_CLIENT_IP
およびHTTP_X_FORWARDED_FOR
?これらのヘッダーはどちらも公式に標準化されていません。したがって:
What is the difference between HTTP_CLIENT_IP and HTTP_X_FORWARDED_FOR?
-言うことは不可能です。異なるプロキシがこれらを実装する場合としない場合があります。実装はプロキシごとに異なる場合がありますが、そうでない場合があります。標準の欠如は疑問符を生み出します。Why would one have different values than the other?
-ポイント1を参照してください。ただし、純粋に実用的な観点から見ると、これらの値が異なるのは、複数のプロキシが関係している場合だけです-X-Forwarded-For:
ヘッダーにはClient-IP:
ヘッダーには実際のクライアントIPが含まれますが、転送チェーンの完全なトラック。ただし、これは単なる憶測です。Where can I find resources on the exact definition of these headers.
-できません。ポイント1を参照してください。X-Forwarded-For:
ヘッダーに関して ある種の事実上の標準 があるようですが、 それを定義するRFCがないため、これは信頼できません 以下のコメントを参照してください。
補足として、Client-IP:
ヘッダーは 'user-defined'ヘッダーであるため、慣例によりX-Client-IP:
である必要があります。
この方法でも試すことができます:
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$user_ip = $_SERVER['HTTP_CLIENT_IP'];
} else if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$user_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_X_FORWARDED'])) {
$user_ip = $_SERVER['HTTP_X_FORWARDED'];
} else if (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
$user_ip = $_SERVER['HTTP_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_FORWARDED'])) {
$user_ip = $_SERVER['HTTP_FORWARDED'];
} else if (isset($_SERVER['REMOTE_ADDR'])) {
$user_ip = $_SERVER['REMOTE_ADDR'];
} else {
$user_ip = null;
}