Ich verstehe, dass ein Header HTTP_X_FORWARDED_FOR
wird von Proxyservern festgelegt, um die IP-Adresse des Hosts zu identifizieren, der die HTTP-Anforderung über den Proxy sendet. Ich habe gehört, dass der Header HTTP_CLIENT_IP
ist für ähnliche Zwecke eingestellt.
HTTP_CLIENT_IP
und HTTP_X_FORWARDED_FOR
?Keiner dieser Header ist offiziell standardisiert. Deshalb:
What is the difference between HTTP_CLIENT_IP and HTTP_X_FORWARDED_FOR?
- es ist unmöglich zu sagen. Verschiedene Proxys können diese implementieren oder nicht. Die Implementierungen können von einem Proxy zum nächsten variieren und sie können es nicht. Das Fehlen eines Standards führt zu Fragezeichen.Why would one have different values than the other?
- Siehe Punkt 1. Aus rein praktischer Sicht kann ich jedoch nur dann feststellen, wenn mehr als ein Proxy beteiligt war - möglicherweise der X-Forwarded-For:
- Header Enthalten Sie dann einen vollständigen Track der Weiterleitungskette, während der Client-IP:
- Header die tatsächliche Client-IP enthalten würde. Dies ist jedoch reine Spekulation.Where can I find resources on the exact definition of these headers.
- Das kannst du nicht. Siehe Punkt 1.Es scheint eine Art De-facto-Standard zu geben in Bezug auf den X-Forwarded-For:
- Header, aber da es keinen RFC gibt, der dies definiert, kann man sich nicht darauf verlassen siehe Kommentar unten.
Als Randnotiz sollte der Client-IP:
- Header standardmäßig X-Client-IP:
Lauten, da es sich um einen benutzerdefinierten Header handelt.
Sie können auf diese Weise auch versuchen:
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;
}