hi,
ETag dient wohl mehr dazu, mehrere Entitäten, also Ausprägungen o.ä., einer Ressource zu unterscheiden.
exakt!
Gut - dann kannst du mir vielleicht erklären, was das bedeutet, was ich da schrieb? :-)
Ich kann mir unter mehreren "Ausprägungen" einer Ressource nämlich so richtig bildhaft auch noch nichts (sinnvolles) vorstellen.
Der Header "Last-Modified" bestimmt lediglich die letzte Ändereung einer Resource. Folgendes Script würde also zu unerwünsten Verhalten führen: [...]
Sicher - aber da untergräbst du bewährtes Verhalten ja bewusst.
Wodurch sollte ich mich veranlasst fühlen, bei einer auf einer statischen Datei basierenden Ressource bei einer Änderung das Änderungsdatum anschließend wieder zurückzusetzen?
Mir selber Schnitzel ans Knie zu nageln, halte ich für ein wenig erfüllendes Verhalten ...
Dein Beispiel sehe ich also eher als theoretisches an - du hast zwar recht damit, aber es erscheint mir doch arg praxisfern.
Dadurch, daß sich der Header "ETag" beim Beispiel apache aus INode MTime Size zusammensetzt, wird eine Veränderung, die das kleine Script vorgenommen hat, dennoch erkannt. Der Header ist also erheblich verläßlicher.
Das mag auf dein konstruiertes Beispiel zutreffen.
Wenn ich aber bei dynamisch erstelltem Content anhand des Änderungsdatums die Entscheidung treffen möchte, ob ich mit 304 oder 200 und erneuter Auslieferung der Ressource antworte, sehe ich im ETag keinen Vorteil gegenüber dem Last-Modified.
So z. B. FF und Moz während Opera, IE und links hier weder "If-Modified-Since" oder "If-None-Match" senden.
Tun sie nicht?
Hrmpf, dann kann man sich den Aufwand ja fast sparen ...
Nicht mal Opera unterstützt Conditional Get in dieser Hinsicht?
Da dynamisch generierte Dokumnente mit unterschiedlichen Parametern arbeiten ($_GET,$_POST, etc.) und demzufolge auch unterschiedliche Ausgaben erzeugen, wird es auf ein Ausgabepufferung hinauslaufen müssen.
Ein dynamisch generiertes Dokument kann ja bspw. auch ein RSS-Feed oder eine Weblog-Seite sein.
Deren Inhalt ändert sich nur, wenn ein neuer Eintrag oder Kommentar hinzugekommen ist.
Dies kann ich am Scriptanfang aus meiner Datenbank ermitteln - und könnte mit 304 antworten, und mir so den Traffic für das erneute Ausliefern der Daten sparen.
Klar, gleich "richtiges" Caching zu implementieren, und den RSS-Feed als statische Datei zu erzeugen, wäre natürlich alternative denkbar.
gruß,
wahsaga
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }