Есть определённый AJAX-запрос, который клиенты могут выполнять к серверу любое количество раз. Хочу это исправить и снять немного нагрузку с сервера при помощи клиентского кэша. Маршрут таков: клиент - nginx - express. На стороне express я настроил выдачу ответа клиенту с заголовком Cache-Control:
if(apiRes.hasOwnProperty('cacheTime')) {
res.set('Cache-Control', `public,max-age=${apiRes.cacheTime}`)
}
Теперь в запросе к серверу я получаю первый раз код 200, а при повторных запросах 304 Not Midified. Но при этом сервер всё равно продолжает принимать запросы и обрабатывать их. Почему браузер не сохраняет в своём кэше ответы от моего сервера и всё равно продолжает слать к нему запросы?
Браузеры так устроены что они пытаются проверить все ссылки если вы явно обновляете страницу через F5 или кнопкой. Кеширование будет работать если вы будете ходить со страницы на страницу, не через кнопку обновления а, например, по ссылкам.
Если хочется большего, можно порекомендовать настроить прозрачное кеширование в nginx. Таким образом даже если человек будет обновлять страницу, ваш сервер Express не будет задействован.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости