Beide repräsentieren eine Hashsumme des Nachrichtentextes. Beide können verwendet werden, um zu überprüfen, ob die Ressource seit der letzten Anforderung durch einen bestimmten Client geändert wurde. Wenn sie identisch sind, warum existieren sie dann in der RFC2616-Spezifikation?Was ist im HTTP-Protokoll der Unterschied zwischen ETag und Content-MD5?
Antwort
Beide repräsentieren eine Hashsumme des Nachrichtentextes.
Nicht ganz. Content-MD5
ist ein Hash, aber ETag
ist eine undurchsichtige Kennung: der Client weiß nicht, was es bedeutet. Es ist wahr, dass eine Möglichkeit, eine geeignete ETag
zu erzeugen, darin besteht, die Daten der Ressource zu hashen, aber es ist sicherlich nicht die einzige.
Beide können zur Überprüfung verwendet werden, wenn die Ressource seit dem letzte Mal geändert wurde es von einem bestimmten Client angefordert wurde.
Das stimmt, obwohl in beiden Fällen theoretisch sowohl falsch positive als auch falsch negative Ergebnisse erhalten werden können.
Wenn sie identische Sache tun, warum koexistieren sie in der RFC2616-Spezifikation?
Die Koexistenz, weil sie verschiedenen Zwecken dienen; "Sie tun identische Dinge" ist nicht wahr.
Content-MD5
soll den Client die Integrität der übertragenen Ressource überprüfen lassen: seine Bedeutung ist gut definiert, und es soll nicht verwendet werden, nachdem die Antwort empfangen wurde.
ETag
ist für die Koordinierung der Zwischenspeicherung vorgesehen. Da es undurchsichtig ist, kann es die Semantik eines "Ressourcenidentifizierers" von seiner Mechanik entkoppeln (so kann der Server ein beliebiges Identifikationsschema verwenden, und es ist frei, dieses Schema in der Zukunft zu ändern, ohne dass die Kunden Einfluss auf den Prozess nehmen). Zusätzlich unterstützt ETag
weak validation, wodurch zwei bitweise unterschiedliche Versionen einer Ressource als semantisch äquivalent behandelt werden können.