Руководство по HTTP. Кэширование.

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

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

Базовый механизм кэширования – неявные команды кэшам, в которых сервер определяет время истекания и валидность. Для этих целей мы используем заголовок Cache-Control.

Заголовок Cache-Control позволяет клиенту или серверу передавать различные команды в запросы или ответы. Обычно, эти команды переопределяют алгоритмы кэширования, определённые по умолчанию. Команды кэширования указывают списком и отделяются запятыми.

Пример:


Cache-control: no-cache

При HTTP запросах клиент может использовать следующие команды кэширования:

Команда кэширования запроса и описание
1 no-cache

Кэш не должен использовать ответ для удовлетворения запроса без успешной повторной валидации начальным сервером.

2 no-store

Кэш не должен хранить какую-либо информацию о запросе клиенте или ответе сервера.

3 max-age = seconds

Указывает максимальный возраст ответа (в секундах), который клиент может принимать.

4 max-stale [= seconds]

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

5 min-fresh = seconds

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

6 no-transform

Не преобразует тело сущности.

7 only-if-cached

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

В HTTP ответах сервер может использовать команды, которые указаны ниже:

Команда кэширования ответа и описание
1 public

Ответ может быть кэширован любым кэшом.

2 private

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

3 no-cache

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

4 no-store

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

5 no-transform

Не преобразует тело сущности

6 must-revalidate

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

7 proxy-revalidate

То же самое, что и must-revalidate, за исключением того, что не общие кэши агентов пользователей, не разрешены.

8 max-age = seconds

Указывает максимальный возраст ответа (в секундах), который может быть принят клиентом.

9 s-maxage = seconds

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

На этом мы заканчиваем изучение кэширования в протоколе HTTP.
В следующей статье мы рассмотрим, каким образом в HTTP обеспечивается безопасность.