Учебники

HTTP — Кэширование

HTTP обычно используется для распределенных информационных систем, где производительность можно улучшить с помощью кэшей ответов. Протокол HTTP / 1.1 включает в себя ряд элементов, предназначенных для обеспечения работы кэширования.

Целью кэширования в HTTP / 1.1 является устранение необходимости отправлять запросы во многих случаях и устранение необходимости отправлять полные ответы во многих других случаях.

Основные механизмы кэширования в HTTP / 1.1 — это неявные директивы для кэшей, где сервер указывает время истечения и валидаторы. Для этой цели мы используем заголовок Cache-Control .

Заголовок Cache-Control позволяет клиенту или серверу передавать различные директивы в запросах или ответах. Эти директивы обычно переопределяют алгоритмы кэширования по умолчанию. Директивы кэширования указываются в списке через запятую. Например:

Cache-control: no-cache

Следующие директивы запроса кеша могут использоваться клиентом в его HTTP-запросе:

SN Директива и описание запроса кэша
1 нет кэша

Кэш не должен использовать ответ для удовлетворения последующего запроса без успешной повторной проверки на исходном сервере.

2 нет-магазин

Кэш не должен хранить ничего о клиентском запросе или ответе сервера.

3 максимальный возраст = секунды

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

4 max-stale [= секунд]

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

5 min-fresh = секунды

Указывает, что клиент готов принять ответ, время свежести которого не меньше его текущего возраста плюс указанное время в секундах.

6 нет-преобразования

Не конвертирует сущность-тело.

7 только-если-кэшированные

Не извлекает новые данные. Кеш может отправлять документ, только если он находится в кеше, и не должен связываться с origin-сервером, чтобы узнать, существует ли более новая копия.

Кэш не должен использовать ответ для удовлетворения последующего запроса без успешной повторной проверки на исходном сервере.

Кэш не должен хранить ничего о клиентском запросе или ответе сервера.

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

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

Указывает, что клиент готов принять ответ, время свежести которого не меньше его текущего возраста плюс указанное время в секундах.

Не конвертирует сущность-тело.

Не извлекает новые данные. Кеш может отправлять документ, только если он находится в кеше, и не должен связываться с origin-сервером, чтобы узнать, существует ли более новая копия.

Следующие директивы ответа кеша могут использоваться сервером в его HTTP-ответе:

Указывает, что ответ может быть кэширован любым кешем.

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

Кэш не должен использовать ответ для удовлетворения последующего запроса без успешной повторной проверки на исходном сервере.

Кэш не должен хранить ничего о клиентском запросе или ответе сервера.

Не конвертирует сущность-тело.

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

Директива proxy-revalidate имеет то же значение, что и директива must-revalidate, за исключением того, что она не применяется к кэшам пользовательских агентов, которые не используются совместно.

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

Максимальный возраст, указанный в этой директиве, переопределяет максимальный возраст, указанный в директиве max-age или в заголовке Expires. Директива s-maxage всегда игнорируется частным кешем.