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 - устанавливает время хранения ресурса в кэше в секундах