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

Ответ

Браузер по умолчанию пытается кешировать любые статические ресурсы, полученные по 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' });
});

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

Ответ 18+ 🔞

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

Что он, сука, кеширует по умолчанию:

  • Всё статическое: Картинки (.jpg, .png), стилишки (.css), скрипты (.js), шрифты — ну, в общем, всё, что не меняется каждую секунду.
  • Ответы на GET-запросы, но только если в заголовках нет прямого запрета. Если ты с бэкенда не отправил нужных инструкций, браузер сам начнёт думать, что кешировать, и получится ёперный театр.

Основные рычаги управления, которые тебе, как backend-разработчику на Node.js, надо крутить:

  • Cache-Control — это твой главный инструмент, царь и бог. Хочешь, чтобы файл месяц жил в кеше у клиента? max-age=2592000. Хочешь, чтобы никогда не кешировался? no-store. Всё просто, как три копейки.
  • ETag / Last-Modified — это для умного кеша. Браузер приходит и говорит: «У меня есть версия от такого-то числа». Ты смотришь — если ничего не менялось, отвечаешь «304 Not Modified» и не тратишь трафик на пересылку тех же самых байтов. Экономия — пиздец!

Вот тебе живой пример на Express.js, чтобы не быть голословным:

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

// Раздаём статику и говорим: «Храни это, блядь, 30 дней, не дергай сервак»
app.use('/static', express.static('public', {
  maxAge: '30d', // Кешируй, сука, целый месяц
  etag: true // ETag включи, пусть умные запросы делает
}));

// А вот API-шный роут — тут кеш нахуй не нужен, данные живые
app.get('/api/data', (req, res) => {
  res.set('Cache-Control', 'no-store, no-cache, must-revalidate');
  res.json({ data: 'live' });
});

Если ты нихуя не настроишь, браузер будет сам решать по каким-то своим, ебаным, эвристикам. Но доверия к этому ноль. Поэтому всегда, блядь, явно прописывай правила на сервере, и тогда у тебя не будет ситуации, когда ты обновил style.css, а у пользователей ещё неделю старая версия торчит. Сам от такого охуевал не раз.