Я новичок в веб-разработке и заметил проблему: браузеры, похоже, не учитывают заголовок 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, и почему они не были исправлены, поэтому нам не нужно обходное решение решения, такие как строки запроса, добавленные к файлам или использующие хэш файла или дату последнего изменения?
Изначально вы обслуживали ресурс без заголовков кеша. В этом случае Технические характеристики позволяет клиенту самому выбирать время кэширования:
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
, чтобы сообщить об этом намерении браузеру.
который показывает вам, как использовать строки запроса для истечения срока действия кеша, а следующий рекомендует метод времени, поэтому есть много сообщений / даже Google, по-видимому, рекомендует неправильную практику, как это звучит, и даже отвлекает людей от передовой практики в сообщениях, поэтому эти сообщения (и их было всего несколько) могут ввести в заблуждение таких людей, как я, когда я пытался найти правильный способ сделать это, посмотрев «stackoverflow не хранит кеш на клиенте», который вызывает Cache-Control на верхний пост, но не указывает важную оговорку о том, что вы упомянули 2/2
@JordanPlayz158: я отредактировал вопрос, добавив дополнительную информацию. Откровенно говоря, вы не можете ожидать, что поймете сложную техническую тему, выполнив поиск в Google и прочитав ответы StackOverflow. Если вы хотите понять, как работает кэширование HTTP, я предлагаю просмотреть RFC 7234, который достаточно краток и ясен, а также является исчерпывающим и правильным.
Спасибо и да, нереально пытаться понять, как работает кэширование HTTP с помощью ответов StackOverflow или с помощью Google.
Да, в моих предыдущих заголовках не было никаких флагов Cache-Control, но сколько времени по умолчанию составляет максимальный возраст, пока он не получит новую копию с сервера. Хотя странно, что строки запроса кажутся предпочтительным решением везде, где я искал, есть ли лучший способ с флагами Cache-Control? Знаете ли вы какую-либо причину, по которой это решение стало, казалось бы, предпочтительным? Я подумал об этом, у людей нет средств самостоятельно устанавливать флаги Cache-Control, или если вы не использовали флаги Cache-Control в прошлом, браузеру потребуется много времени, чтобы получить новые флаги?