Ответ 1
Я понял. Google Chrome игнорирует заголовок Cache-Control
или Expires
, если вы делаете запрос сразу после другого запроса на тот же URI на той же вкладке (нажав кнопку обновления, нажав клавишу F5 или нажав Command + R). Вероятно, у него есть алгоритм, чтобы угадать, что действительно хочет сделать пользователь.
Способ тестирования заголовка Cache-Control
- это возврат документа HTML со ссылкой на него. При нажатии на ссылку Chrome отправляет документ из кеша. Например, назовите следующий документ self.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test Page</title>
</head>
<body>
<p>
<a href="self.html">Link to the same page.</a>
If correctly cached, a request should not be made
when clicking the link.
</p>
</body>
</html>
Другой вариант - скопировать URL-адрес и вставить его на ту же вкладку или на другую вкладку.
ОБНОВЛЕНИЕ. На странице Опубликованная Chrome 26 января 2017 года описано, что было предыдущим поведением и как это изменяется, делая только повторную проверку основного ресурса, но не под-ресурсов:
Пользователи обычно перезагружаются либо потому, что страница сломана, либо содержимое кажется устаревшим. Существующее поведение перезагрузки обычно решает сломанные страницы, но устаревшее содержимое неэффективно устраняется путем регулярной перезагрузки, особенно на мобильных устройствах. Эта функция была первоначально разработана в моменты, когда сломанные страницы были довольно распространены, поэтому было разумно сразу обращаться к обоим вариантам использования. Однако эта первоначальная проблема теперь стала гораздо менее актуальной, поскольку качество веб-страниц увеличилось. Чтобы улучшить испорченный контент, Chrome теперь имеет упрощенное поведение перезагрузки, чтобы проверить только основной ресурс и продолжить регулярную загрузку страницы. Это новое поведение максимизирует повторное использование кэшированных ресурсов и приводит к более низкой задержке, потреблению энергии и использованию данных.
В сообщении Facebook, опубликованном 26 января 2017 года, упоминается, что они нашли фрагмент кода, были лишены хеширования всех кэшированных ресурсов после запроса POST:
мы обнаружили, что Chrome будет пересматривать все ресурсы на страницах, которые были загружены из запроса POST. Команда Chrome сообщила нам, что это объяснение состояло в том, что запросы POST, как правило, являются страницами, которые вносят изменения, например, совершают покупку или отправляют электронное письмо, и что пользователь захочет иметь самую последнюю страницу.
Кажется, что это уже не так.
Наконец, описано, что Firefox вводит Cache-Control: immutable
, чтобы полностью остановить повторную проверку ресурсов:
Firefox внедрил предложение одного из наших инженеров, чтобы добавить новый кеш-контроль для некоторых ресурсов, чтобы сообщить браузеру, что этот ресурс никогда не должен быть пересмотрен. Идея этого заголовка заключается в том, что это дополнительное обещание от разработчика браузеру, что этот ресурс никогда не изменится во время его максимального срока службы. Firefox решил реализовать эту директиву в виде кеша-контроля: неизменяемый заголовок.
Я надеюсь, что это поможет распутать тайны перезагрузки.