Eine Expires*
Direktive mit "Modifikation" als Basis bezieht sich auf die Änderungszeit der Datei auf dem Server. Wenn Sie beispielsweise "Modification plus 2 hours" einstellen, wird jeder Browser, der innerhalb von 2 Stunden nach der Änderung der Datei (auf dem Server) Inhalte anfordert, diesen Inhalt bis 2 Stunden nach der Änderungszeit der Datei zwischenspeichern. Und der Browser weiß, wann diese Zeit ist, weil der Server einen Header Expires
mit der richtigen Ablaufzeit sendet.
Lassen Sie mich mit einem Beispiel erklären: sagen Sie Ihre Apache-Konfiguration die Zeile
ExpiresDefault modification plus 2 hours
enthält und Sie haben eine Datei index.html
, die die ExpiresDefault
Richtlinie gilt, auf dem Server. Angenommen, Sie laden eine Version von index.html
um 9:53 GMT hoch und überschreiben die vorhergehende index.html
(falls es eine gab). Jetzt ist die Modifikationszeit von index.html
9:53 GMT. Wenn Sie wurden ls -l
auf dem Server (oder dir
unter Windows) ausgeführt wird, würden Sie es in der Liste sehen:
-rw-r--r-- 1 apache apache 4096 Feb 18 09:53 index.html
Jetzt, mit jeder Anfrage, sendet Apache die Last-Modified
Header mit der letzten Änderung der Datei. Da Sie diese ExpiresDefault
Direktive haben, sendet es auch den Expires
Header mit einer Zeit, die der Modifikationszeit der Datei (9:53) plus zwei Stunden entspricht. Also hier ist ein Teil von dem, was der Browser sieht:
Last-Modified: Wed, 18 Feb 2009 09:53:00 GMT
Expires: Wed, 18 Feb 2009 11:53:00 GMT
Wenn der Zeitpunkt, an dem der Browser diese Anforderung ist vor 11.53 Uhr GMT macht, wird der Browser die Seite zwischenspeichern, da es noch nicht abgelaufen ist.Wenn der Benutzer die Seite also zum ersten Mal um 11:00 GMT besucht und dann um 11:30 GMT wieder auf die gleiche Seite geht, wird der Browser sehen, dass seine zwischengespeicherte Version noch gültig ist und nicht (oder besser, nicht)) Erstellen Sie eine neue HTTP-Anfrage.
Wenn der Benutzer ein drittes Mal um 12:00 GMT auf die Seite geht, sieht der Browser, dass seine zwischengespeicherte Version nun abgelaufen ist (es ist nach 11:53), also versucht er die Seite zu validieren und sendet eine Anfrage an die Server mit einem If-Modified-Since-Header. Eine Antwort 304 (nicht geändert) ohne Nachricht wird zurückgegeben, da das Datum der Seite seit der ersten Zustellung nicht geändert wurde. Da das Ablaufdatum abgelaufen ist - die Seite ist "veraltet" - wird bei jedem weiteren Besuch der Seite eine Validierungsanfrage gestellt, bis die Validierung fehlschlägt.
Nun stellen wir uns statt dessen vor, dass Sie um 11:57 eine neue Version der Seite hochgeladen haben. In diesem Fall wird der Versuch der Browser die alte Version der Seite um 12:00 Uhr zur Validierung schlägt fehl, und es empfängt in der Antwort, zusammen mit der neuen Seite, diese beiden neuen Header:
Last-Modified: Wed, 18 Feb 2009 11:57:00 GMT
Expires: Wed, 18 Feb 2009 13:57:00 GMT
(Die letzte Änderungszeit der Datei wird 11:57 beim Hochladen der neuen Version, und Apache berechnet die Ablaufzeit als 11:57 + 2:00 = 13:57 GMT.)
Validierung (mit dem jüngeren Datum) wird nicht sein benötigt jetzt bis 13:57 Uhr.
(Hinweis natürlich, dass viele andere Dinge, zusammen mit den beiden Header gesendet werden, die ich oben aufgeführt, ich getrimmt nur aus den ganzen Rest der Einfachheit halber)
Hallo David, das macht Sinn, allerdings bin ich mir noch nicht sicher, warum und wie der Server den Browser sendet. Also, wenn ich das richtig verstehe, sendet der Server beim nächsten Mal, wenn der Browser die Ressource anfordert, Informationen an den Browser über den Änderungsstatus der Dateien - aber das ist kein Ergebnis –
Ich dachte, das wäre am einfachsten mit einem Beispiel zu erklären Ich bearbeitete eins in ... –
genial danke für Ihre Zeit –