Es scheint die Art von Sache zu sein, die man leicht durch eine falsche Vermutung für das, was der allgemeine Fall ist, oder durch die Bevorzugung der Korrektheit gegenüber der Leistung, standardmäßig, wenn es ein paar Zweifel gibt.
Gestatten Sie mir eine Geschichte darüber, wie es machen könnte gegangen sind:
Sie entscheiden früh, dass eine Hash/Prüfsumme über den Inhalt ist eine schlechte Idee aus Performance-Gründen
. "Wer weiß, wie groß die Datei sein könnte? Wir können diese nicht ständig neu berechnen ..." Also entscheiden sie sich für Größe und Datum und kommen einem ziemlich nahe.
"Aber warten Sie", sagt Person A, "nichts garantiert, dass Sie keine Dateigröße Kollision haben. In der Tat gibt es Fälle, wie Firmware-Binärdateien, wenn die Dateigröße immer gleich ist, und es ist vollständig möglich, dass mehrere gleichzeitig von einer Dev-Maschine hochgeladen werden, so dass diese nicht ausreichen, um zwischen verschiedenen Inhalten zu unterscheiden. "
Person B: "Hmm, guter Punkt. Wir brauchen etwas, das untrennbar mit dem Inhalt der Datei verbunden ist. Etwas, das zusammen mit der modifizierten Zeit Ihnen sagen kann, ob es sich um denselben Inhalt handelt."
Person A: "Was ist mit der Inode? Jetzt, auch wenn sie die Dateien umbenennen (vielleicht ändern sie" empfohlen "in eine andere Datei zum Beispiel), wird das Standard-Etag gut funktionieren!"
Person B: "Ich weiß nicht, Inode scheint ein bisschen gefährlich."
Person A: "Nun, was wäre besser?"
Person B: "Ja, gute Frage. Ich denke, ich kann nicht denken, was speziell falsch ist, ich habe nur ein allgemein schlechtes Gefühl dabei."
Person A: "Aber es garantiert zumindest, dass Sie ein neues herunterladen, wenn es geändert wird. Das Schlimmste, was passiert, ist, dass Sie öfter herunterladen, als Sie brauchen, und jeder, der weiß, dass sie sich keine Sorgen machen müssen es kann es einfach ausschalten. "
Person B: "Ja, das macht Sinn. Es ist wahrscheinlich in den meisten Fällen in Ordnung, und es scheint besser als die einfachen Alternativen."
Haftungsausschluss: Ich weiß nicht, was die Apache-Implementierer gedacht haben könnten. Das ist alles nur Hand-Wellen-Raten, und versuchen, eine plausible Geschichte zu machen.Aber ich habe diese Art von Dingen schon oft genug erlebt.
Sie wissen nie, woran Sie nicht gedacht haben (in diesem Fall waren redundante Server mit Lastenausgleich, die dieselben Dateien bereitstellen, typischer als sich um Größen- und Zeitkollisionen kümmern zu müssen). Der Load Balancer ist nicht Teil von Apache, was es einfacher macht, einen solchen Überblick zu erstellen.
Plus, der Fehlermodus hier ist, dass Sie den Cache nicht perfekt effizient genutzt haben (NICHT, dass Sie falsche Daten erhalten haben), was wohl besser, aber ärgerlich ist. Das legt nahe, dass selbst wenn sie darüber nachdenken würden, sie vernünftigerweise annehmen könnten, dass jemand, der genug Interesse daran hat, einen Load Balancer einzurichten, auch in der Lage wäre, ihre Konfigurationsdetails abzustimmen.
PS: Es geht nicht um Standards. Nichts spezifiziert, wie Sie die Etag berechnen sollen, nur dass es ausreichend sein sollte, um zu sagen, ob sich der Inhalt mit hoher Wahrscheinlichkeit geändert hat.
Gute Frage, aber wahrscheinlich gehört auf ServerFault.com – Avi
Ich denke, es gehört hier - es ist mehr über die Wahl des Algorithmus – Greg
Ich denke, Sie müssen näher darauf eingehen, warum Sie denken, es ist eine schlechte Idee. –