So richten Sie Apache 2.2.3 ein, um "zuletzt geändert" usw. Zu senden

9

und den Browser anzuweisen, ein Objekt (und / oder eine Seite ... alles auf der Site) nur dann neu zu laden, wenn es seit dem letzten Besuch geändert wurde ??? htaccess, httpd.conf ... haben Sie ein fertiges Direktivenrecht für meinen Fall? Vielen Dank

smepie
quelle

Antworten:

5

Beachten Sie, dass Last-ModifiedHeader schwache Cache-Header sind. Die aktuelle Präferenz ist die Verwendung von Cache-ControlHeadern.

Google hat einen guten Artikel dazu.

Caching optimieren

Läuft ab und Cache-Kontrolle: maximales Alter. Diese geben die „Aktualitätslebensdauer“ einer Ressource an, dh den Zeitraum, in dem der Browser die zwischengespeicherte Ressource verwenden kann, ohne zu überprüfen, ob eine neue Version vom Webserver verfügbar ist. Sie sind "starke Caching-Header", die bedingungslos gelten. Das heißt, sobald sie festgelegt und die Ressource heruntergeladen sind, gibt der Browser keine GET-Anforderungen für die Ressource aus, bis das Ablaufdatum oder das maximale Alter erreicht ist.

Last-Modified und ETag. Diese geben einige Merkmale der Ressource an, die der Browser überprüft, um festzustellen, ob die Dateien identisch sind. In der Überschrift "Zuletzt geändert" ist dies immer ein Datum. Im ETag-Header kann dies ein beliebiger Wert sein, der eine Ressource eindeutig identifiziert (Dateiversionen oder Inhalts-Hashes sind typisch). Last-Modified ist ein "schwacher" Caching-Header, bei dem der Browser eine Heuristik anwendet, um zu bestimmen, ob das Element aus dem Cache abgerufen werden soll oder nicht. (Die Heuristiken unterscheiden sich zwischen verschiedenen Browsern.) Mit diesen Headern kann der Browser jedoch seine zwischengespeicherten Ressourcen effizient aktualisieren, indem er bedingte GET-Anforderungen ausgibt, wenn der Benutzer die Seite explizit neu lädt. Bedingte GETs geben die vollständige Antwort nur zurück, wenn sich die Ressource auf dem Server geändert hat, und haben daher eine geringere Latenz als vollständige GETs.

Ich empfehle, nach Bedarf entweder Cache-Controloder ExpiresHeader zu verwenden, da es sich um starke Cache-Header handelt. Einige Systeme ignorieren die zuletzt geänderten Daten.

Sie können dann ein Tool wie curloder http://redbot.org verwenden , um die Header zu überprüfen.

jeffatrackaid
quelle
2
FWIW: "schwach" hat sich Google ausgedacht. Expiresist ein völlig unangemessener Header für Ressourcen, die nicht ablaufen. Einige Ressourcen können geändert werden, jedoch nicht zu einem bestimmten Ablaufdatum. Der Punkt von Google ist, Last-Modifieddass ein bedingtes GET erforderlich ist, während Expiresder Browser-Cache das GET insgesamt überspringen kann.
Dancrumb
1
Der Begriff schwach ist einfach Semantik. Der Punkt ist, dass die Verwendung von Last-ModifiedHeadern ohne andere Caching-Anweisungen den Cache-Zeitraum dem HTTP-Client überlässt. Wenn eine Ressource seit dem Last-ModifiedDatum nicht geändert wurde , sollte die Ressource als frisch betrachtet werden. Im Gegensatz dazu kann der Ursprung bei Verwendung eines Expiresoder eines Cache-ControlHeaders eine explizite Frischeperiode festlegen.
Jeffatrackaid
1
"schwach" v "stark" ist definiert unter tools.ietf.org/html/rfc7232#section-2.1 (Hinweis auch an @Dancrumb)
John Bentley