Какие данные браузер кеширует по умолчанию?

«Какие данные браузер кеширует по умолчанию?» — вопрос из категории Сети, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Браузер по умолчанию пытается кешировать любые статические ресурсы, полученные по HTTP/HTTPS, если сервер явно не запретил это. Как backend-разработчик на Node.js, я управляю этим поведением через HTTP-заголовки.

Что кешируется:

  • Статические файлы: Изображения (.jpg, .png), стили (.css), скрипты (.js), шрифты (.woff2), иконки.
  • Ответы на GET-запросы, если в них есть соответствующие заголовки.

Ключевые заголовки для управления кешем с Node.js:

  • Cache-Control — основной заголовок. Например, max-age=3600 говорит браузеру хранить ресурс 1 час.
  • ETag / Last-Modified — используются для условных запросов (If-None-Match, If-Modified-Since). Браузер отправляет такой запрос, и сервер может ответить 304 Not Modified, экономя трафик.

Пример настройки в Express.js:

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

// Статика с долгим кешированием
app.use('/static', express.static('public', {
  maxAge: '30d', // Кешировать 30 дней
  etag: true // Включить ETag
}));

// Динамический API-роут без кеширования
app.get('/api/data', (req, res) => {
  res.set('Cache-Control', 'no-store, no-cache, must-revalidate');
  res.json({ data: 'live' });
});

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