Kalkulator ważności pamięci podręcznej HTTP
Wpisz wartości Cache-Control, Expires, Date i Age odpowiedzi, czas jej otrzymania i czas sprawdzenia. Kalkulator poda czas świeżości, bieżący wiek i informację, czy odpowiedź jest nadal świeża.
Co robi ten kalkulator
Obejmuje jedną część normy RFC 9111, standardu buforowania HTTP: obliczanie świeżości. To część, która rozstrzyga, czy zapisana odpowiedź może zostać użyta ponownie bez sprawdzania na serwerze źródłowym. Walidacja (ETag, If-Modified-Since, 304), Vary i Cache-Control po stronie żądania nie są uwzględniane.
Świeżość to nie odświeżenie ani usunięcie
Odpowiedź nieświeża oznacza tylko, że pamięć podręczna nie może jej użyć ponownie bez wcześniejszego sprawdzenia. Nie oznacza, że ekran przeglądarki odświeży się sam, ani że plik na serwerze źródłowym został zmieniony lub usunięty. Podobnie odpowiedź świeża nie oznacza, że plik na serwerze się nie zmienił. Nagłówek Expires, jak mówi norma, „nie oznacza, że oryginalny zasób zmieni się lub przestanie istnieć w tym czasie, przed nim lub po nim”. Ten kalkulator wylicza wyłącznie arytmetykę czasu dla kopii w pamięci podręcznej.
Czas świeżości i bieżący wiek
- Czas świeżości: długość czasu, przez jaki odpowiedź może pozostać „świeża”. Ustala go sama odpowiedź (Cache-Control lub Expires) i nie zmienia się z upływem czasu.
- Bieżący wiek: czas, który upłynął od wygenerowania odpowiedzi. Rośnie z upływem czasu.
- Czy jest świeża? Odpowiedź jest świeża tylko wtedy, gdy czas świeżości jest większy niż bieżący wiek (gdy są równe, jest nieświeża).
- Pozostała świeżość = czas świeżości − bieżący wiek.
Która wartość ustala czas świeżości
Zgodnie z sekcją 4.2.1 RFC 9111 używane jest pierwsze dopasowanie:
| Kolejność | Współdzielona pamięć podręczna (CDN, proxy) | Prywatna pamięć podręczna (przeglądarka) |
|---|---|---|
| 1 | s-maxage | (s-maxage nie jest używane) |
| 2 | max-age | max-age |
| 3 | Expires − Date | Expires − Date |
| 4 | Jeśli żadnego nie ma, nie ma jawnego terminu ważności | To samo |
- Jeśli występuje max-age, Expires jest ignorowane. W współdzielonej pamięci podręcznej jeśli występuje s-maxage, max-age i Expires są ignorowane (sekcja 5.3).
- Jeśli ta sama dyrektywa występuje więcej niż raz, używana jest pierwsza (jedno z podejść dozwolonych przez normę).
- Wartość max-age lub s-maxage, która nie jest liczbą całkowitą lub jest w cudzysłowie (norma mówi, że nadawca nie może generować postaci w cudzysłowie), jest traktowana jako nieprawidłowa, a odpowiedź jest uznawana za nieświeżą (czas świeżości 0). Wartość powyżej 2 147 483 648 jest traktowana jako 2 147 483 648 (sekcja 1.2.2).
- Jeśli Expires ma wartość
0lub datę, która nie istnieje, odpowiedź jest traktowana jako już wygasła (sekcja 5.3). - Gdy nie ma jawnego terminu ważności, świeżość heurystyczna (na przykład szacunek na podstawie Last-Modified) nie jest obliczana. Standard pozostawia heurystyczny czas życia do decyzji implementacji.
Jak obliczany jest bieżący wiek
Wzory pochodzą z sekcji 4.2.3 dokumentu RFC 9111:
- Wiek pozorny = max(0, czas odebrania − Date)
- Wiek w chwili odebrania = max(wiek pozorny, nagłówek Age + opóźnienie odpowiedzi)
- Bieżący wiek = wiek w chwili odebrania + czas od odebrania
Ten kalkulator nie pyta o czas wysłania żądania, więc przyjmuje opóźnienie odpowiedzi (czas od wysłania żądania do odebrania odpowiedzi) równe 0. Przy połączeniu z dużym opóźnieniem obliczony wiek może być mniejszy od rzeczywistego. Standard dopuszcza też użycie samego nagłówka Age plus opóźnienia.
Zasady wprowadzania danych
- Wpisz daty jako IMF-fixdate (na przykład
Sun, 06 Nov 1994 08:49:37 GMT) albo jako czas UTC w postaci2026-10-21 07:28:00. Wszystko jest w UTC (GMT); strefy czasowe nie są obsługiwane. Rok musi mieścić się w zakresie od 1900 do 2100, a sekundy od 0 do 59 (sekunda przestępna, 60, nie jest akceptowana). Nazwa dnia tygodnia nie jest sprawdzana względem daty. - Formaty RFC 850 i asctime to formaty, które odbiorcy HTTP powinni akceptować, ale ten kalkulator ich nie obsługuje. (Nie oznacza to, że są nieprawidłowe w HTTP. Zamień wartość na IMF-fixdate.)
- Jeśli Date jest puste, zamiast niego używany jest czas wpisany w polu „Czas odebrania odpowiedzi”. RFC 9110 mówi, że odbiorca, który otrzyma odpowiedź bez Date, zapisuje czas odbioru i dodaje go jako Date. Jeśli ten czas też jest pusty, obliczeń wymagających Date (Expires − Date i wiek pozorny) nie można wykonać. Bieżący czas przeglądarki nigdy nie jest używany automatycznie; jest wstawiany tylko po naciśnięciu przycisku „bieżący czas”, do pola „Czas sprawdzenia”.
- Czas sprawdzenia nie może być wcześniejszy niż czas odebrania odpowiedzi.
Inne dyrektywy Cache-Control
Nie są używane w obliczeniach, ale są pokazywane jako uwagi dotyczące ponownego użycia.
- no-store: nie wolno zapisywać. private: pamięć podręczna współdzielona nie może tego zapisać (przeglądarka może).
- no-cache (bez argumentów): nawet gdy jest świeża, nie można jej ponownie użyć bez weryfikacji.
- must-revalidate: po utracie świeżości nie wolno jej używać bez weryfikacji. proxy-revalidate: to samo, ale nie dotyczy prywatnej pamięci podręcznej.
- public: jawnie zezwala na zapisywanie.
- immutable (RFC 8246) oraz stale-while-revalidate i stale-if-error (RFC 5861) wykraczają poza RFC 9111. Są rozpoznawane, ale nie są używane w obliczeniach.
Przykłady
| Dane wejściowe | Wynik |
|---|---|
| max-age=3600, brak Age, 1800 s po odebraniu | Czas świeżości 3600 s, bieżący wiek 1800 s, pozostało 1800 s (świeża) |
| To samo, po dokładnie 3600 s | Bieżący wiek 3600 s. Jest równy czasowi świeżości, więc odpowiedź jest nieświeża |
| max-age=3600, Age=600, tuż po odebraniu | Bieżący wiek 600 s, pozostało 3000 s |
| Pamięć podręczna współdzielona z s-maxage=60, max-age=3600 | Czas świeżości 60 s (max-age jest ignorowane) |
Warto wiedzieć
- To obliczenie oparte na standardzie. Prawdziwe przeglądarki i sieci CDN nie zawsze zachowują się dokładnie tak, jak opisuje standard. Działania takie jak wymuszone odświeżenie i ustawienia specyficzne dla CDN mogą dawać inne wyniki. Zachowanie konkretnego produktu nie jest gwarantowane.
- Świeżość heurystyczna, walidacja, Vary, dyrektywy żądania i sumowanie kilku pamięci podręcznych nie są objęte.
Źródła i weryfikacja
Poniższe sprawdzono z pełnym tekstem standardów 1 listopada 2026:
- RFC 9111, „HTTP Caching”: https://www.rfc-editor.org/rfc/rfc9111 (sekcje 1.2.2, 4.2.1, 4.2.3, 5.1, 5.2.2 i 5.3, w tym test świeżości
freshness_lifetime > current_age) - RFC 9110, „HTTP Semantics”: https://www.rfc-editor.org/rfc/rfc9110 (sekcje 5.6.7 i 6.6.1)
Ten kalkulator stosuje te sekcje wyłącznie w zakresie świeżości. Zgodność obliczenia nie oznacza twierdzenia, że produkt lub serwer jest zgodny ze standardem.
Najczęściej zadawane pytania
Co się dzieje, gdy występują jednocześnie max-age i Expires?
max-age ma pierwszeństwo, a Expires jest ignorowane (RFC 9111, sekcja 5.3).
Czy s-maxage dotyczy przeglądarki?
s-maxage jest dyrektywą dla współdzielonych pamięci podręcznych. Prywatna pamięć podręczna (przeglądarka) jej nie używa.
Czym jest nagłówek Age?
To liczba sekund, zapisana przez pamięć podręczną na trasie, od wygenerowania odpowiedzi lub ostatniego sprawdzenia na serwerze źródłowym. Ten kalkulator używa go do obliczenia bieżącego wieku.
Czy nieświeża odpowiedź znika lub odświeża się sama?
Nie. Nieświeża oznacza tylko, że pamięć podręczna musi ją sprawdzić przed ponownym użyciem. Nie odświeża ekranu ani niczego nie zmienia na serwerze źródłowym.
Jak sprawdzić czas?
Pomocne mogą być konwerter znacznika czasu Unix i kalkulator wyrażeń Cron.