Allegro75
@Allegro75
SummaryTables.ru - сайт с футбольной статистикой

Почему сервер главнее браузера в вопросах кэширования (или что этот сервер себе позволяет)?

Человек я не слишком опытный - 1 год работы PHP-разработчиком.
У меня возникла следующая проблема.
Я разрабатываю функционал по типу добавления товаров в корзину.
И при добавлении нового товара корзина не торопится его показывать (хотя куки с новым составом корзины вроде прекрасно перезаписаны) - показывает старый состав корзины.
Очевидно, браузер, собака, берёт корзину из истории, из кэша.
Стал я с этим бороться всяко-разно.
Наткнулся тут, на Хабре на ровно такую же историю:
https://qna.habr.com/q/979783
И решение оказалось ровно таким же.
В htaccess, в к-ром и так уже было написано:
<IfModule mod_headers.c>
        Header append Cache-Control "no-store, no-cache, must-revalidate"
</IfModule>
<IfModule mod_expires.c>
        ExpiresActive On ExpiresDefault "now"
</IfModule>

понадобилось добавить ещё:
<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>


Смущает меня то, что я вообще не понимаю, почему всем этим занимается сервер.
Это же чисто браузерные дела - что ему кэшировать, что не кэшировать.
Почему мне не хватило для решения моей проблемы добавления в head в html файла с корзиной вот этого:
<meta http-equiv="Cache-Control" content="no-store">
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">


Ок, я мог бы понять, если б мне надо было запретить кэширование в целой директории, прописать это на сервере тупо удобнее, наверн.
Но мне-то, например, нужен запрет кэширования для одного отдельного файла.
И почему он не действует, почему сервер позволяет себе указывать браузеру как тому работать?
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 1
@AidOnline01
Насколько я понимаю кеширование происходит при отправке ajax запроса. Поэтому нужно указывать то, что запрос не нужно кешировать именно в ajax запрос. К примеру в axios это происходит примерно так:
axios.get(
  'https://YOUR-URL.com',
  {
    // query URL without using browser cache
    headers: {
      'Cache-Control': 'no-cache',
      'Pragma': 'no-cache',
      'Expires': '0',
    },
  }
)


Кеширование работает с обеих сторон. На сервере мы просто указываем, что вот эти страницы/файлы мы предлагаем кешировать на такое-то время. Возможно вашим Api будут пользоваться не только ваш Frontend, но и другие сайты и даже сервера. Поэтому ваш сервер дает рекомендации всем клиентам что и как стоит кешировать. Но конечно же итоговое решение принимать вашему браузеру
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы