Если сервер возвращает Cache-Control = public без Max-Age или Expires, может ли прокси-сервер кэшировать его навсегда? Есть ли у прокси или спецификации встроенные значения по умолчанию для этих значений? Всегда ли сервер так поступает? Спасибо.
Cache-Control public
Content-Length 10874
Content-Type text/html; charset=utf-8
Server Microsoft-IIS/7.0
X-Powered-By ASP.NET
X-AspNet-Version 4.0.30319
Date Thu, 24 Mar 2011 18:45:52 GMT
Имейте в виду, что кеширование - это не то же самое, что повторная проверка. Прокси-сервер может кэшировать объект навсегда, но повторно проверять его на исходном сервере каждый раз, когда делается запрос для этого объекта (т. Е. Делать запрос If-Modified-Since или If-Match, который позволяет исходному серверу указать, что объект не имеет не изменилось без повторного возврата объекта). Если исходный сервер указывает истечение срока действия (т.е. отправляет Expires
или Cache-Control: max-age
заголовок), прокси может считать объект "свежим" для этого периода, а это значит, что ему не нужно его повторно проверять. Если объект не свежий, он считается «устаревшим», что означает, что он должен повторно проверить объект.
Технически прокси-серверы должны обрабатывать объекты как устаревшие, если исходный сервер не указывает на истечение срока, но кажется, что большинство прокси-серверов рассматривают объекты как свежие в течение определенного периода. Похоже, что поведение Squid по умолчанию
refresh_pattern . 0 20% 4320
это означает, что если сервер отправил Last-Modified
заголовок, объект считается свежим в течение 20% разницы между текущим и последним измененным временем до максимум 4320 секунд (3 часа), но никогда не является новым, если Last-Modified
заголовок не был отправлен.
Да, прокси всегда имеют встроенные значения по умолчанию, подавляющее большинство веб-сайтов даже не предоставляют информацию о том, как долго они могут храниться или нет, поэтому они должны иметь значение по умолчанию, которое они могут использовать, чтобы предотвратить появление обновленных веб-сайтов.