it-swarm.com.de

Was ist der Unterschied zwischen HTTP_CLIENT_IP und HTTP_X_FORWARDED_FOR?

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.

  1. Was ist der Unterschied zwischen HTTP_CLIENT_IP und HTTP_X_FORWARDED_FOR?
  2. Warum sollte einer andere Werte haben als der andere?
  3. Wo finde ich Ressourcen zur genauen Definition dieser Header?.
60
Ethan Heilman

Keiner dieser Header ist offiziell standardisiert. Deshalb:

  1. 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.
  2. 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.
  3. 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.

58
DaveRandom

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;
}
0
bharat