Можно ли сделать очистку кеша с помощью HTTP/2?
Кто-нибудь пробовал?
Вот пример использования. В первом цикле запрос-ответ это произойдет:
Запрос 1:
GET / HTTP/1.1
...
Ответ 1
HTTP/1.0 200 OK
Etag: version1
Cache-control: max-age=1
... angly html here
....<link href="mycss.css" >
...
Запрос 2:
GET /mycss.css HTTP/1.1
...
Ответ 2 (вероятно, толкнул):
Etag: version1
Cache-control: max-age=<duration-of-the-universe>
...
... brackety css ...
...
и затем, когда браузеры во второй раз переходят на одну и ту же страницу, они, конечно, снова извлекают ресурс "/" из-за очень короткого max-age:
GET / HTTP/1.1
...
If-not-modified: version1
Но он не получит mycss.css, если он будет в кеше. Однако сервер может использовать валидатор, присутствующий в заголовке "если не изменено" запроса "/", чтобы получить представление о возрасте кэша клиента, и может сделать вывод, что версия браузера mycss.css слишком старая, В этом случае, прежде чем даже ответить на предыдущий запрос, сервер может "пообещать" новую версию mycss.css/
По спецификации, должен ли браузер принимать и использовать его?
1 ответ
Обзор:
Я до сих пор не знаю, что ответ на мой вопрос с чисто теоретической стороны, но, по крайней мере, сегодня на практике кажется невозможным выполнить очистку кэша таким образом:-(, ни с Google Chrome, ни с Firefox. Оба отклонить или проигнорировать выдвинутый поток, если они считают, что ресурс, который они имеют в кэше, является новым.
Я также получил это от кого-то, кто предпочитает оставаться анонимным:
Браузеры обычно помещают ресурсы, полученные посредством push, в "демилитаризованную зону", и только после того, как клиент запросит этот ресурс, он будет перемещен в фактический кеш. Так что простое нажатие случайных вещей не приведет к тому, что они попадут в кеш браузера, даже если браузер примет их в момент нажатия.
Обновить
По состоянию на начало 2016 года это все еще невозможно, в основном из-за отсутствия консенсуса относительно того, как это следует решать, и следует ли это вообще разрешать или нет. Как показывает эта страница, даже при использовании HTTP/2 способ решения проблемы устаревших ресурсов заключается в создании уникального URL-адреса для каждой версии ресурса и последующем обеспечении того, чтобы пользователь получал этот новый URL-адрес при повторном посещении страницы.