Cache oparty na czasie
Walidatory
Wyróżniamy 2 rodzaje walidatorów zasobów:
- silne – występują wtedy, gdy każda zmiana zawartości zasobu powoduje wykrycie zmiany w walidatorze
- słabe – gdy wykrywanie zmian w walidatorze opiera się na danych niezależnych od wartości zasobu (np. na informacjach o czasie)
Zgodnie z powyższą definicja wyróżniamy dwa rodzaje cache’a:
Cache oparty na czasie
Polega on na tym, że przechowywany zasób może być używany tylko przez zdefiniowany czas. Do tego celu używany jest nagłówek: Last-Modified, który wskazuje na datę ostatniej modyfikacji zasobu.
Last-Modified: Tue, 15 Nov 2015 12:45:26 GMT
Data ta jest zapamiętywana razem z rekordem i podczas wysłania następnego zapytania GET lub HEAD, dodawany jest warunkowy nagłówek sprawdzający, czy data ta się zmieniła
If-Modified-Since: Tue, 15 Nov 2015 12:45:26 GMT
Jeżeli zasób nie został od tego czasu zmieniony zwrócony zostanie zasób przechowywany w cache ze statusem 304 (Not Modified)
Nagłówek ten jest używany w następujących przypadkach:
- aby umożliwić działanie cache opartym na wartościach czasowych
- aby ograniczyć zakres przeglądania zasobów sieciowych tylko do rekordów zmienionych od czasu poprzedniego zapytania
Istnieje także nagłówek If-Unmodified-Since, który powoduje przesłanie treści zasobu tylko gdy nie został on zmodyfikowany od pewnego momentu. Nie jest on bezpośrednio wykorzystywany przez cache, ale ma 2 zastosowania:
- gdy pobieramy pewien zasób partiami, przy pobieraniu kolejnej cześć chcemy się upewnić, czy nie został on zmodyfikowany i pobieramy cały czas ten sam zasób
- dla zapytań modyfikujących rekord (np. PUT) możemy w ten sposób zaimplementować mechanizm sprawdzania czy rekord nie został w międzyczasie przz kogoś zmieniony i czy nie chcemy zaktualizować go bazując na nieaktualnej wersji. Jest to rozwiązanie problemu równoczesnego wykorzystywania zasobów.