Настройка заголовка If-Modified-Since для кэширования веб-страниц

Используйте заголовок If-Modified-Since, чтобы сократить объем передаваемых данных и ускорить загрузку страниц. Этот заголовок позволяет браузеру или прокси-серверу запросить у сервера только те ресурсы, которые изменялись с указанной даты.

Как работает заголовок If-Modified-Since

Когда клиент запрашивает ресурс с помощью HTTP-запроса, он посылает заголовок If-Modified-Since, содержащий дату последнего получения этого файла. Если сервер обнаружит, что файл с той даты не изменился, он возвращает статус 304 Not Modified без тела файла. В противном случае сервер отвечает с актуальным содержимым и обновленной датой изменения.

Настройка сервера для использования If-Modified-Since

  1. На сервере необходимо правильно вести учет даты последнего изменения файла. Например, в Apache используйте директиву FileInfo или настройте модуль mod_headers.

  2. Для nginx установите директиву add_header Last-Modified или используйте стандартные механизмы кэширования.

  3. При использовании серверных языков (PHP, Python и др.) вставляйте в ответ заголовок Last-Modified, что позволяет браузеру сравнить дату изменения и сформировать правильный запрос с If-Modified-Since.

Рекомендации по использованию If-Modified-Since

  • Обновляйте дату изменения файла при его изменении, чтобы клиент мог получить актуальный контент.

  • Устанавливайте точное время до секунды в формате Sun, 06 Nov 1994 08:49:37 GMT.

  • Для динамических страниц настройте механизм, который обновляет дату в заголовке при каждом изменении содержимого.

Практические советы

Обеспечьте корректную работу кэширования

Комбинируйте Last-Modified с заголовком ETag для более точного контроля изменений. Это помогает избежать ситуаций, когда обновления не выявляются по дате.

Проверка и тестирование

Используйте инструменты браузера или cURL для проверки поведения:

curl -i -H "If-Modified-Since: Sun, 06 Nov 1994 08:49:37 GMT" http://example.com/resource

Обратите внимание на статус ответа и наличие тела документа.

Итог

Настраивая заголовок If-Modified-Since правильно и своевременно обновляя соответствующие метки, вы увеличите эффективность кэширования и уменьшите нагрузку на серверы. Это даёт быстрый доступ к актуальному содержимому и снижает трафик.