Чаще всего 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 обеспечивается безопасность.