Как работает HTTP max-age и как истечь кеш через некоторое время?

Я управляю кэшированием HTTP в моих приложениях. И это не работает так, как я думаю. Давайте перейдем к фактическому примеру:

С первой подачей моей страницы PHP я обслуживаю следующие заголовки HTTP:

HTTP/1.1 200 OK
Date: Mon, 12 Dec 2016 16:39:33 GMT
Server: Apache/2.4.9 (Win64) PHP/5.5.12
Expires: Tue, 01 Jan 1980 19:53:00 GMT
Cache-Control: private, max-age=60, pre-check=60
Last-Modified: Mon, 12 Dec 2016 15:57:25 GMT
Etag: "a2883c859ce5c8153d65a4e904c40a79"Content-Language: en
Content-Length: 326
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

Мое приложение управляет проверкой Etags и отправляет 304, если ничего не изменилось, и когда вы обновляете страницу в браузере (F5), вы получаете (если ничего не изменилось на стороне сервера):

HTTP/1.1 304 Not Modified
Date: Mon, 12 Dec 2016 16:43:10 GMT
Server: Apache/2.4.9 (Win64) PHP/5.5.12
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100

Так как я работаю Cache-Control: private с max-age=60 Я ожидал бы, что через одну минуту кеш будет считаться устаревшим браузером, и он будет запрашивать новую копию (эквивалент перезагрузки Ctrl + F5), но вместо этого кеш остается в силе через несколько дней после max-age,

Я неправильно понял механизм HTTP? Я отправляю что-то неправильно или, может быть, что-то пропускаю

0

Решение

Если кэшированный ответ находится в пределах максимального возраста, то он считается свежий.

Если он превышает максимальный возраст, то считается несвежий.

Если браузеру нужен ресурс, и у него есть свежая копия в кеше, он будет использовать его, не проверяя сервер.

Если в браузере есть устаревшая копия, он будет проверять ее на сервере (в данном случае, используя Etags), чтобы определить, нужна ли ему новая копия, и кэшированная копия все еще в порядке.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector