HTTP-кеширование
Кэширование - это распространенный метод в современных вычислительных системах, для повышения производительности и сокращения времени отклика. От внешнего интерфейса до серверной части, кэширование играет решающую роль в повышении эффективности различных приложений и систем.
Веббраузеры могут кэшировать HTTP ответы, чтобы обеспечить быстрый поиск данных.
Браузеры поддерживают кэширование редко меняющихся данных: изображений, CSS, JS.
- Кэширование можно разделить на 2 группы:
- Клиентское кэширование - когда данные кэшируются на стороне пользователя, в его браузере. Примером могут служить статистические файлы: изображения, CSS, JS
- Серверное кэширование - когда данные кэшируются на стороне сервера. Примером могут служить кэширование результатов запросов к базе данных или генерация статических HTML страниц на основе динамического контента
Чтобы определить можно ли брать страницу из кэша истользуется заголовок Expire, в котором указывается до какого времени можно хранить ресурс в кэше. Если веб сервер не установил этот заголовок, браузер может использовать поле Last-Modifide, в котором указана дата последнего изменения ресурса.
Протокол HTTP содержит другой подход, который позволяет определить измененилась ли страница, для этого клиент должен отправить серверу Conditiolan GET. Клиент передает запрос Get с условием, в ответ сервер может сказать, что страница не изменилась, тогда браузер берет версию из кэша, а если страница изменилась, то сервер передаст измененную версию веб страницы.
- Сервер может передать 2 ответа на Conditiolan GET запрос :
- Если ресурс не поменялся: статус ответа - 304 Not Modified. Страница берется из кэша
- Ресурс изменился: статус ответа: 200 OK. Измененная версия ресурса передается полностью
Еще есть заголовок Cache-Control, который позволяет более гибко управлять кэшированием.
- Возможные значения:
- no-store - ресурс нельзя сохранять в кэш
- no-cache - ресурс сохранять в кэш можно, но для этого нужно отправить Conditiolan GET запрос, а загружать ресурс из кэша только если он не изменился на сервере
- public - говорит о том, что информация доступна всем и ее можно кэшировать
- private - говорит о том, что страница может быть сохраненена только в частном кэше браузера
- max-age - устанавливает время хранения ресурса в кэше в секундах