Браузеры неправильно следуют Cache-Control спецификации HTTP?

Я новичок в веб-разработке и заметил проблему: браузеры, похоже, не учитывают заголовок Cache-Control, я установил для него значение no-cache, no-store, must-revalidate, но все же многие из моих клиентов изначально имеют кеш (который должен предотвращать отсутствие хранилища в соответствии с на https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#no-store) и кеш используется вместо повторной проверки сервером, что приводит к поврежденным страницам, когда я изменяю JS-скрипт, указанный на странице, только после того, как я говорю им обновить без кеша, браузер получает новый файл, но для браузеров чтобы соответствовать протоколу и спецификации HTTP, разве они не должны соблюдать политику no-store или ни один из основных браузеров не соответствует должным образом протоколу/спецификации HTTP, и почему они не были исправлены, поэтому нам не нужно обходное решение решения, такие как строки запроса, добавленные к файлам или использующие хэш файла или дату последнего изменения?

Да, в моих предыдущих заголовках не было никаких флагов Cache-Control, но сколько времени по умолчанию составляет максимальный возраст, пока он не получит новую копию с сервера. Хотя странно, что строки запроса кажутся предпочтительным решением везде, где я искал, есть ли лучший способ с флагами Cache-Control? Знаете ли вы какую-либо причину, по которой это решение стало, казалось бы, предпочтительным? Я подумал об этом, у людей нет средств самостоятельно устанавливать флаги Cache-Control, или если вы не использовали флаги Cache-Control в прошлом, браузеру потребуется много времени, чтобы получить новые флаги?

JordanPlayz158 22.03.2022 12:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Изначально вы обслуживали ресурс без заголовков кеша. В этом случае Технические характеристики позволяет клиенту самому выбирать время кэширования:

Since origin servers do not always provide explicit expiration times, a cache MAY assign a heuristic expiration time when an explicit time is not specified, employing algorithms that use other header field values (such as the Last-Modified time) to estimate a plausible expiration time.

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

Что касается строк запроса, я думаю, что ваша путаница возникает из-за объединения по крайней мере трех разных проблем. Одним из них является HTTP механизм протокола для передачи политик кэширования. Это описано в RFC 7234 и в основном включает в себя правильное использование заголовка ответа Cache-Control.

Отдельный вопрос — какой стратегия кэширования использовать. То есть какие ресурсы следует кэшировать и на какой срок? Есть разные способы подойти к этому, я бы предложил следовать передовым методам, обсуждаемым здесь.

Наконец, есть как исправить свою ошибку, если вы сообщили о неправильной политике кэширования и теперь вам нужно, чтобы уже кэшированный ресурс был проигнорирован или признан недействительным. В этом случае, если возможно, вы можете просто использовать другой ресурс (т.е. изменить имя). Иногда здесь предлагается добавить строки запроса, но это не лучшее решение, поскольку стандарт не запрещает клиентам кэшировать ресурсы со строками запроса.

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

stackoverflow.com/questions/118884/… у этого нет решений с заголовками Cache-Control, этот человек использовал заголовки управления кешем, и люди сказали ему использовать строки запроса или другой метод хеш-имен файлов js или случайных чисел stackoverflow.com/questions/49282489/…, не рекомендует строку запроса, но рекомендует эквивалент в основном stackoverflow.com/questions/37204296/…, а остальные 2 показывают статью Google 1/2
JordanPlayz158 24.03.2022 12:41

который показывает вам, как использовать строки запроса для истечения срока действия кеша, а следующий рекомендует метод времени, поэтому есть много сообщений / даже Google, по-видимому, рекомендует неправильную практику, как это звучит, и даже отвлекает людей от передовой практики в сообщениях, поэтому эти сообщения (и их было всего несколько) могут ввести в заблуждение таких людей, как я, когда я пытался найти правильный способ сделать это, посмотрев «stackoverflow не хранит кеш на клиенте», который вызывает Cache-Control на верхний пост, но не указывает важную оговорку о том, что вы упомянули 2/2

JordanPlayz158 24.03.2022 12:49

@JordanPlayz158: я отредактировал вопрос, добавив дополнительную информацию. Откровенно говоря, вы не можете ожидать, что поймете сложную техническую тему, выполнив поиск в Google и прочитав ответы StackOverflow. Если вы хотите понять, как работает кэширование HTTP, я предлагаю просмотреть RFC 7234, который достаточно краток и ясен, а также является исчерпывающим и правильным.

Kevin Christopher Henry 24.03.2022 17:00

Спасибо и да, нереально пытаться понять, как работает кэширование HTTP с помощью ответов StackOverflow или с помощью Google.

JordanPlayz158 26.03.2022 19:20

Другие вопросы по теме