Кеш на стороне клиента на css / js

Перво-наперво я должен сказать, что трачу свое время, чтобы прочитать все темы в этом случае, но безуспешно, недавно я столкнулся с проблемой с кешем клиента / браузера на моем веб-сайте, это произошло без каких-либо изменений. Кеш на стороне сервера хорош, но на стороне клиента работает так плохо, я должен нажимать 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 в правильном направлении?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
265
3

Ответы 3

Попробуйте использовать HTTP Etags. Это позволит клиенту определить, нужно ли перезагрузить ресурс с сервера.

есть идеи, как я могу его использовать?

tour travel 14.03.2018 18:23

Попробуйте установить заголовок Etag с md5 поверх содержимого файла в качестве содержимого.

Laurent P 15.03.2018 09:48

Это работает каждый раз: добавьте ? + random stuff в конец ваших файлов. Например :

<script src = "path/to/file.css?8768316833"></script>

В PHP я считаю, что это должно быть сделано таким образом (я не писал PHP годами, но здесь :)

<script src = "path/to/file.css?<?php echo rand() ?>"></script>"

Это заставит браузер каждый раз загружать новую копию файлов.

Не очень эффективно в качестве решения, файл все равно будет повторно загружен с сервера, независимо от того, изменился он или нет ...

holden 14.03.2018 17:17

Если я не ошибаюсь, разве это не то, о чем просит OP? Или, может быть, я неправильно понял

Jeremy Thille 14.03.2018 17:19

Он просто написал, что ему не нужно решение "управления версиями" в строке запроса; в любом случае я считаю, что и управление версиями, и параметр rand () по разным причинам неэффективны. В любом случае, я не осмелился проголосовать против вашего ответа, потому что, в общем, это решает проблему открывающего.

holden 14.03.2018 17:24

По крайней мере, вы бы сказали, почему проголосовали против, а это достаточно редко :)

Jeremy Thille 14.03.2018 17:32

Спасибо за ответ, но, как я уже сказал, я не хочу использовать версию, потому что это плохо для SEO. Я хочу сделать это правильно, а не трюком. Я больше хочу знать, в чем именно проблема.

tour travel 14.03.2018 18:20
<?php $filename "path/to/file.css";  ?>
<script src = "<?php echo $filename; ?>?ver=<?php echo filemtime($filename); ?>"> 

Это будет кешировано в браузере, но когда вы внесете изменения в файл, время файла будет обновлено, и клиент получит новую копию файла.

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