Перво-наперво я должен сказать, что трачу свое время, чтобы прочитать все темы в этом случае, но безуспешно, недавно я столкнулся с проблемой с кешем клиента / браузера на моем веб-сайте, это произошло без каких-либо изменений. Кеш на стороне сервера хорош, но на стороне клиента работает так плохо, я должен нажимать CTRL+F5 каждый раз, я не хочу этого, потому что это плохо для пользователей, я знаю, что могу отключить кеш, когда devTool открыт, но я говорю не о пользователе только я. Это происходит и на настольных компьютерах, и на мобильных устройствах. На мобильном устройстве я должен перейти к настройке / конфиденциальности / очистке кеша.
Вот коды моего веб-сайта, связанные с кешем:
htaccess: mod_expires
ExpiresByType text/css "access plus 1 month"
Я удалил css из gzip, но безуспешно. Также меняем 1 месяц на 1 секунду.
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
Заголовок PHP:
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Pragma: no-cache");
header("Vary: Accept-Encoding");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
HTML-мета:
<meta http-equiv = "Cache-Control" content = "no-cache" />
<meta http-equiv = "Pragma" content = "no-cache" />
<meta http-equiv = "Expires" content = "0" />
Как видите, я пробовал всеми возможными способами бороться с надоедливым кешем, но безуспешно. Я знаю, что могу добавить version в конец css или js, но все знают, что это плохая привычка очищать кеш:
Remove query strings from static resources
Resources with a "?" in the URL are not cached by some proxy caching servers. Remove the query string and encode the parameters into the URL for the following resources:
Итак, как лучше всего удалить тяжелый кеш css и js в правильном направлении?






Попробуйте использовать HTTP Etags. Это позволит клиенту определить, нужно ли перезагрузить ресурс с сервера.
есть идеи, как я могу его использовать?
Попробуйте установить заголовок Etag с md5 поверх содержимого файла в качестве содержимого.
Это работает каждый раз: добавьте ? + random stuff в конец ваших файлов. Например :
<script src = "path/to/file.css?8768316833"></script>
В PHP я считаю, что это должно быть сделано таким образом (я не писал PHP годами, но здесь :)
<script src = "path/to/file.css?<?php echo rand() ?>"></script>"
Это заставит браузер каждый раз загружать новую копию файлов.
Не очень эффективно в качестве решения, файл все равно будет повторно загружен с сервера, независимо от того, изменился он или нет ...
Если я не ошибаюсь, разве это не то, о чем просит OP? Или, может быть, я неправильно понял
Он просто написал, что ему не нужно решение "управления версиями" в строке запроса; в любом случае я считаю, что и управление версиями, и параметр rand () по разным причинам неэффективны. В любом случае, я не осмелился проголосовать против вашего ответа, потому что, в общем, это решает проблему открывающего.
По крайней мере, вы бы сказали, почему проголосовали против, а это достаточно редко :)
Спасибо за ответ, но, как я уже сказал, я не хочу использовать версию, потому что это плохо для SEO. Я хочу сделать это правильно, а не трюком. Я больше хочу знать, в чем именно проблема.
<?php $filename "path/to/file.css"; ?>
<script src = "<?php echo $filename; ?>?ver=<?php echo filemtime($filename); ?>">
Это будет кешировано в браузере, но когда вы внесете изменения в файл, время файла будет обновлено, и клиент получит новую копию файла.
Возможный дубликат Как заставить браузер перезагружать кешированные файлы CSS / JS?