Вопрос проверяет понимание механизмов кеширования HTTP-запросов и способов его обхода для получения актуальных данных.
Кеширование GET-запросов — это механизм, который позволяет браузеру или прокси-серверу сохранять ответы на повторяющиеся запросы, чтобы ускорить загрузку и снизить нагрузку на сервер. Однако иногда требуется получить свежие данные, минуя кеш. Рассмотрим основные способы обхода кеширования.
Самый распространённый метод — добавить к URL уникальный параметр, например, текущее время или случайное число. Это заставляет браузер считать запрос новым и не использовать кешированный ответ.
fetch('/api/data?t=' + Date.now());
// или
fetch('/api/data?_=' + Math.random());Можно явно указать браузеру не кешировать запрос, установив соответствующие заголовки. На стороне клиента это делается так:
fetch('/api/data', {
headers: {
'Cache-Control': 'no-cache',
'Pragma': 'no-cache'
}
});На стороне сервера можно настроить ответ с заголовками Cache-Control: no-store или Expires: 0.
Сервер может возвращать заголовки ETag (уникальный идентификатор версии) или Last-Modified (дата последнего изменения). Клиент отправляет их в запросе (If-None-Match или If-Modified-Since), и сервер отвечает 304 Not Modified, если данные не изменились. Это не обходит кеш полностью, но позволяет проверить актуальность.
POST-запросы по умолчанию не кешируются браузерами. Если это допустимо по логике приложения, можно заменить GET на POST. Однако это нарушает семантику HTTP и может быть неудобно.
Выбор метода зависит от контекста: для простых случаев подойдёт добавление параметра, для более контролируемого кеширования — заголовки Cache-Control, а для проверки актуальности — ETag. Важно помнить, что чрезмерное обход кеша может увеличить нагрузку на сервер.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию