Поиск по сайту
Ctrl + K
Вопросы по Веб-разработке

Как работает кеширование в браузере? Что такое ETag, Cache-Control и другие заголовки кеша?

Кеширование в браузере — это механизм, который позволяет сохранить копии загружаемых ресурсов (таких как HTML, CSS, изображения и JavaScript) на локальном устройстве пользователя для ускорения загрузки веб-страниц при повторных посещениях.

Когда пользователь первый раз загружает страницу, браузер запрашивает ресурсы у сервера. После получения ответов сервер может указать, как долго эти ресурсы должны храниться в кеше. Это делается с помощью HTTP-заголовков. Основные заголовки, связанные с кешированием, включают:

1. Cache-Control

Этот заголовок определяет, как и как долго ресурсы могут храниться в кеше. Некоторые из ключевых директив Cache-Control:

  • max-age=<seconds>: Определяет время (в секундах), в течение которого ресурсы считаются свежими. Например, max-age=3600 означает, что ресурс можно кешировать на 1 час.
  • no-cache: Браузер должен проверить наличие новой версии ресурса перед использованием кеша.
  • no-store: Запрещает кеширование. Ресурс должен загружаться каждый раз заново.

Пример использования в ответе сервера:

Cache-Control: max-age=3600, public

2. ETag

ETag (Entity Tag) — это уникальный идентификатор версии ресурса. Когда браузер запрашивает ресурс, сервер может отправить ETag. При последующих запросах браузер может отправить этот ETag обратно серверу для проверки, изменился ли ресурс.

Пример работы:

  • Сервер отвечает с заголовком:
    ETag: "abc123"
    
  • При следующем запросе браузер отправляет:
    If-None-Match: "abc123"
    
  • Если ресурс не изменился, сервер может ответить с кодом 304 Not Modified, что говорит браузеру использовать кешированную версию.

3. Expires

Этот заголовок также определяет, когда ресурс считается устаревшим, но задает дату и время в будущем вместо времени в секундах (как Cache-Control). Например:

Expires: Wed, 21 Oct 2025 07:28:00 GMT

4. Pragma

Этот заголовок используется для совместимости с HTTP/1.0 и фактически является устаревшим в HTTP/1.1. Однако иногда его можно встретить в старых приложениях:

Pragma: no-cache

Пример кода на Node.js с использованием Express

Вот пример простого сервера на Node.js, который устанавливает заголовки кеширования:

const express = require('express');
const app = express();

app.get('/image', (req, res) => {
    res.setHeader('Cache-Control', 'public, max-age=3600');
    res.setHeader('ETag', 'abc123');
    res.sendFile('path/to/image.png'); // Укажите путь к вашему изображению
});

app.listen(3000, () => {
    console.log('Сервер запущен на http://localhost:3000');
});

Заключение

Кеширование в браузере — это важный аспект веб-разработки, который поможет улучшить производительность ваших приложений. Правильное использование заголовков кеша может значительно сократить время загрузки страниц и снизить нагрузку на сервер. Понимание этих заголовков поможет вам лучше контролировать процесс кеширования ваших ресурсов.