computer:web:cache
This is an old revision of the document!
Table of Contents
Caching
Hier werden nur Caching Headers im Response von GET Request behandelt.
Einträge dem Cache hinzufügen (Cacheability)
Dieses Kapitel behandelt die Cache-Control direktiven
- public
- private
- no-store
- (max-age)
- (s-maxage)
Algorithmus zur Bestimmung der Cachebarkeit [1]
if( Methode speicherbar und unterstützt vom cache && Statuscode unterstützt vom cache && Statuscode != 1xx && !request.no-store && !response.no-store && (shared => !response.private) && ( (shared => !request.Authorization) || unless the response explicitly allows it (see Section 3.2) ) && ( response.Expires || response.max-age || (shared && response.s-maxage) || (response.Cache-Control Extension (see Section 5.2.3) that allows it to be cached) || (response.status.cacheable_by_default) || (response.public) ) ) { Vermutlich Speichern } else { Definitiv nicht speichern }
Speicherbare Methoden sind [2]:
- GET [3]
- HEAD [4]
- POST mit explicit freshness information (s. Calculating Freshness Lifetime) [5]. Dazu gibts eine weitere Erklärung und ein Beispiel von eBay.
Zu den Statuscodes die standardmäßig cachebar sind gehören unter anderem: 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, und 501 [6][7]
Die Statuscode != 1xx
Einschränkung kommt aus dem aktuellen draft und sorgt dafür das nur finale (>= 200) Antworten gespeichert werden.
Einträge aus dem Cache löschen (Invalidation)
Einträge aus dem Cache holen
Dieses Kapitel behandelt die Cache-Control direktiven
- no-cache
if( Anfrage.URI == Eintrag.URI && passtZusammen(Anfrage.Methode, Eintrag.Methode) && Alle Header des Eintrags passen zu denen der Anfrage && ( (Anfrage.Pragma.no-cache || Anfrage.Cache-Control.no-cache) => erfolgreiche validierung von Eintrag ) && ( Eintrag.Cache-Control.no-cache => erfolgreiche validierung von Eintrag ) && ( Eintrag.fresh || Eintrag.can_be_served_stale (see Section 4.2.4) || erfolgreiche validierung von Eintrag ) ) { Eintrag verwenden } else { Eintrag nicht verwenden }
passtZusammen(Anfrage_Methode, Eintrag_Methode)
- Ein GET Eintrag kann eine GET oder eine HEAD Anfrage beantworten [8].
- Ein HEAD Eintrag kann eine HEAD Anfrage beantworten [9].
- Ein POST Eintrag kann
- eine GET Anfrage beantworten, wenn der Eintrag
Content-Location
gleich der Anfrage URI und den Status-Code 200 hat [10]. - eine POST Anfrage mit dem selben Body??
Eintrag | ||||
---|---|---|---|---|
GET | HEAD | POST | ||
Anfrage | GET | , wenn der Eintrag Content-Location gleich der Anfrage URI und den Status-Code 200 hat [11] | ||
HEAD | ?? | |||
POST | ( )?? s. eBay Beispiel |
Weiteres
Dieser Abschnitt ist noch hochgradig Falsch!
- public proxy (shared cache) vs private browser cache
- Neu Laden vs validieren
Cache-Control vom Server | Für | Funktion | Typ |
---|---|---|---|
no-cache | Immer → validieren | Cachability | |
public | Private / Shared | Cachability | |
private | Shared | Private / Shared | Cachability |
max-age=<seconds> | Private / Shared | Relative Cache Zeit | Expiration |
s-maxage=<seconds> | Shared | Relative Cache Zeit (vorrang vor Expires und s-maxage ) | Expiration |
must-revalidate | Private / Shared | Abgelaufen → validieren | Re{validate,loading} |
proxy-revalidate | Shared | Abgelaufen → validieren | Re{validate,loading} |
immutable | Nicht abgelaufen → verwenden (auch bei F5, aber nicht bei Shift+F5) / Abgelaufen →Nicht verwenden [12] | Re{validate,loading} | |
no-store | Cachability: Private / Shared | Other | |
no-transform | Gecachten content nicht verändern (z.B. Optimieren) | Other |
- REDbot: Caching Header online analyse tool
- Preload ggf. auch bei Edge caches
- POST, PUT und DELETE invalidieren private und shared cached. [13]
- RFC 7234: Hypertext Transfer Protocol (HTTP/1.1): Caching
- RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
- draft-ietf-httpbis-cache-03: HTTP Caching (obsoletes RFC 7234)
- Liste an ''Cache-Control'' direktiven bei der IANA.
- Zusammenfassung wie Browser Caching umsetzen (Kompatibilitäts-Testergbnisse)
computer/web/cache.1549779536.txt.gz · Last modified: 2020-11-18 18:10 (external edit)