Ответ
Браузер по умолчанию пытается кешировать любые статические ресурсы, полученные по 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, а у пользователей ещё неделю старая версия торчит. Сам от такого охуевал не раз.