LINUX.ORG.RU

Кеш

 


0

2

Есть боевой сайт и тестовый. Когда обновляешь сайт(путем простого затирания старых файлов новыми), то пользователи не сразу видят обновления, причана тому кеш браузера. Как решить эту проблему и заставить всех юзеров загрузить в час Х новые данные с сервера? Знаю про заголовки Expired, но обновления могут быть раз в день, раз в 3 дня, нет точного времени
Сайт на пхп, нгинкс и апач

★★★★

добавлять к путям версию, к примеру
/test.js?v=0.0.1

во время обновления - версию увеличиваем

kiotoze ★★★★
()

есть еще заголовок Cache-control, там можно установить no-cache, если кэшировать вообще не требуется.

Знаю про заголовки Expired, но обновления могут быть раз в день, раз в 3 дня, нет точного времени

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

filequest
()

Ставить Expired на несколько часов?

заставить всех юзеров загрузить в час Х новые данные с сервера

Last-modified

Valkeru ★★★★
()
Ответ на: комментарий от filequest

можно установить no-cache, если кэшировать вообще не требуется.

Если shared-хостинг, то это может выйти боком

Valkeru ★★★★
()
Ответ на: комментарий от filequest

если кэшировать вообще не требуется.

точней, кэширование все равно будет, только клиент будет каждый раз отправлять запрос на сервер с целью проверки актуальности кэша

no-cache - принуждает кэш отправлять запрос на исходный сервер каждый раз для валидации, прежде чем выдать кэшированную копию. Это полезно, когда необходимо гарантировать, что аутентификация принята во внимание (в сочетании с public) или для поддержания жесткой свежести без потери преимуществ кэширования.

https://habrahabr.ru/post/204464/

filequest
()
Ответ на: комментарий от Valkeru

Я чуть ошибся, кэширование там все равно будет, см выше

filequest
()
Ответ на: комментарий от kiotoze

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

gobot ★★★★
() автор топика
Ответ на: комментарий от filequest

В куку писать версию и если она меньше посылать no-cache? В скрипте я смогу проверить, а как быть с цсс, жс?

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

по-идее, можно всегда писать no-cache, независимо ни от чего. С цсс и js то же самое, если надо, можно писать, какая разница. Я сам не использовал, но судя по описанию, клиент просто проверит все на актуальность при любом запросе.

filequest
()
Ответ на: комментарий от filequest

есть еще заголовок Cache-control, там можно установить no-cache

Хром и Фокс время от времени в погоне за производительностью на этот заголовок забивают, если у файлов «статические на вид» ссылки (картинки, .html и т.п.). Я запарился с ними воевать и требующий обновления контент стал отдавать или по get-ссылкам, или по ссылкам, меняющимся после каждого изменения (например, в суффиксе несколько цифр из таймстампа обновления).

KRoN73 ★★★★★
()

Cache manifest спасёт тебя. Клиенты проверяют 1 файл, в котором точно написано, что обновилось.

x3al ★★★★★
()
Ответ на: комментарий от gobot

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

webpack, если что, дефолтно сохраняет бандл с хэшем в имени, зачем такие костыли?

x3al ★★★★★
()
Ответ на: комментарий от x3al

Это как я понимаю система сборки сайта? Пока не знаю нужно ли оно мне, хочу сделать максимум по простому

gobot ★★★★
() автор топика

А как можно запретить браузеру лезть на сервер, даже когда нажимаешь F5? Хочу вечно закешировать некоторые картинки

В nginx прописал

add_header Cache-Control "max-age=2592000";

Сервер отдает такие заголовки:
Cache-Control:max-age=2592000
Connection:keep-alive
Date:Wed, 06 Apr 2016 10:46:26 GMT
ETag:"56a05f76-1676"
Last-Modified:Thu, 21 Jan 2016 04:32:54 GMT
Server:nginx/1.9.10

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Я пробовал все нагугленные варианты (да и сейчас там где нужно кеш блокировать, все варианты расписываю, пусть даже отчасти из карго-культа). Но раз в год-другой в очередной новой версии Хрома или Фокса (да и Оперы раньше — тоже) опять начинались грабли с кешированием файлов, выглядящих как статика. Так что забил и стал менять имена :)

KRoN73 ★★★★★
()
Ответ на: комментарий от x3al

Если нажать F5 то отдает 304, если Ctrl+F5 - отдает 200. Но ведь все равно делает запрос на сервер

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Блин, да добавь ты timestamp в виде параметра к адресу стиля\картинки, уже выше несколько раз сказали. Ничего лучше этого варианта хипстеры тебе не предложат.

ThisNameWasFree
()
Последнее исправление: ThisNameWasFree (всего исправлений: 1)
Ответ на: комментарий от ThisNameWasFree

Предложат, естественно. Сборочный скрипт, добавляющий хэш в имя каждого файла статики. Этим в том или ином виде пользуются буквально все. Есть как в сборщиках JS, так и в бэкэнд-фреймворках.

x3al ★★★★★
()

Если речь о статике, то формируй шаблонами имена файлов вида

<img src=«img.jpg?12345678912»>, где 12345678912 - timestamp времени последнего изменения этого файла.

Заголовки expires увы не все браузеры воспринимают адекватно + некоторые сидят за неадекватными кеширующими прокси.

r_asian ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.