Прежде чем я проясню ситуацию, позвольте мне представить вам ситуацию, с которой я столкнулся, это Angular, но решение в общем.

У меня есть два компонента (страницы) в Angular, которым нужны одни и те же данные, поэтому обычно мы извлекаем их в сервисе, получаем наблюдаемые или обещания и предоставляем компонентам при необходимости.

В компоненте используется асинхронный канал, мы можем отображать данные, однако асинхронный канал отправляет запрос обещанию или наблюдателю каждый раз, когда мы переходим на эту страницу с другой страницы, это заставило меня беспокоиться о том, чтобы сделать еще один HTTP-запрос, когда у меня уже были данные .

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

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

Однако мы по-прежнему делаем запрос, и этого можно избежать, если сервер будет следовать рекомендациям и указывать директивы Cache-Control или Expires в своих ответах, чтобы клиент знал, как долго они действительны, и мог пропустить шаг проверки и просто используйте кешированный ответ немедленно, вообще не делая запроса :).