Задать вопрос
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">


Ок, я мог бы понять, если б мне надо было запретить кэширование в целой директории, прописать это на сервере тупо удобнее, наверн.
Но мне-то, например, нужен запрет кэширования для одного отдельного файла.
И почему он не действует, почему сервер позволяет себе указывать браузеру как тому работать?
  • Вопрос задан
  • 166 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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, но и другие сайты и даже сервера. Поэтому ваш сервер дает рекомендации всем клиентам что и как стоит кешировать. Но конечно же итоговое решение принимать вашему браузеру
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽