Сбросить кэш одной страницы
Есть тайм страницы, если данные по ней обновляются, необходимо в заголовке указать дату последнего обновления? В каком формате указывают или возможно через strotime?
Передача значений input из формы одной страницы в скрипт другой страницы
Добрый вечер! В общем есть у меня две страницы. На первой странице форма, в inputы формы.
хочу перейти с одной php страницы на другую, но вместо новой страницы появляется окно подтверждения
пытаюсь перейти с одной php-страницы на другую. но вместо новой страницы окно подтверждения и.
Кэш страницы в гугле
Ребят первый раз сталкиваюсь с такой мутнёй. посмотрите кэш гугла. .
Не обновляется кэш страницы в выдаче
Посоветуйте, что делать? Внес изменения на главной странице, добавились новости, изменились тексты.
'Expires: '. gmdate('D, d M Y H:i:s') .' GMT'
Заголовок Expires содержит дату/время, по истечении которой ответ с сервера считается устаревшим.
Прошедшая или невалидная дата, например 0, обозначает, что ресурс уже устарел.
Если в ответе с сервера установлен заголовок Cache-Control с директивами «max-age» или «s-maxage» , заголовок Expires игнорируется.
Но как-бы если браузер только на это смотрит , то он даже не будет проверять что там на сервере.
или проверять если там например https://developer.mozilla.org/. he-Control
must-revalidate ему послали ранее. как я думаю
Есть ещё всякие ETag
https://developer.mozilla.org/. ловки/ETag
вроде уже позже что-то придумали по этому поводу,
Надо-бы курить такое https://developer.mozilla.org/. эширование
и проверять всегда-ли соответствует действительности )
header("Expires: " . gmdate("D, d M Y H:i:s", $user['time']). " GMT");
Не понимаю, есть время. Необходимо ориентироваться по нему. Как сделать так, чтобы при последнем обновлении, если тайм не тот, обновить кэш?
Обычно для статических файлов сервер может сам отправлять Last-Modified
. формат времени такой-же
И сам-же проверяет оптравить-ли 304 или отдать файл по новой с 200,
если в заголовках запроса присутствует If-Modified-Since/If-Unmodified-Since
Скрипту придётся самому сравнивать время и решать что отдавать
Или если страницу отдали с ETag, браузер будет слать If-None-Match , проверяя каждый раз качать или не качать
Добавлено через 27 минут
Сообщение от x_lab
header("Last-Modified: " . gmdate("D, d M Y H:i:s", 1589538535). " GMT"); phpinfo(); ?>
Firefox-ESR отправил
Host: localhost
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Fri, 15 May 2020 10:28:55 GMT
Сервер ответил
HTTP/1.1 304 Not Modified
Date: Fri, 15 May 2020 10:37:21 GMT
Server: Apache/2.4.38 (Debian)
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
header('Last-Modified: '.gmdate("D, d M Y H:i:s GMT", $user_pr['time']));
Не лишний заголовок, но не работает. К примеру на странице присутствует фон, который пользователь меняет загружая новое изображение.
В заголовке time меняется, а вот изображение выдает старое.
В системном файле выставлено
#Кеш для статических объектов filesMatch ".(gif|webp|svg|js|css|woff|woff2|eot|ttf|ico)$"> Header set Cache-Control "max-age=250000, public" filesMatch>
Возможно из-за этого, но как быть тогда. Необходимо чтобы то и другое работало в паре.
В данный мент добавил в url get параметр к изображению, где прописан тайм. Так работает, но это по моему не правильно так делать.
Как очистить кеш браузера с помощью php?
Вы имеете в виду: как предотвратить кеширование моих данных. Ты не можешь Очистить кэш браузеров с сервера без предустановленного программного обеспечения (ActiveX и т. д.), который имеет широкие права на изменение системы пользователя. — anddoutoi
4 ответы
header("Cache-Control: no-cache, must-revalidate"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Content-Type: application/xml; charset=utf-8");
Однако очистка кеша каждый раз — не всегда лучший вариант. Возможно, стоит прочитать эту статью. — Джон Уинстэнли
Content-Type здесь — отвлекающий маневр. — Корнель
это не очищает кеш браузера пользователя. Однако он сообщает браузеру не кэшировать эту конкретную страницу. — DA.
Хороший способ избавиться от необходимости учить клиента очищать кеш. — Иван Ивкович
этот код не работает для меня, сэр . мне нужно вручную перезагрузить мою страницу. — Анкит Сутар
Вы можете удалить кеш браузера, установив следующие заголовки:
У меня это работает. Я попытался сделать превью pdf размером 6 МБ. Мой скрипт работает с небольшими pdf-файлами, но не более 3 мб. — user2439124
Это способ очистки кеша, включая путь к загруженному аудио или файлу изображения. — Роуф Абд
Это не очистит уже существующий кеш. Если браузер ранее посещал страницу и для заголовков было установлено кеширование, он, скорее всего, просто загрузит кешированные файлы и никогда не получит новые заголовки без кеширования, пока пользователь вручную не обновит содержимое на их стороне. — Питер Каллен
Похоже, вам нужно управлять версиями, поэтому, когда произойдет какое-то изменение, браузер поймает что-то новое, и пользователю не нужно будет очищать кеш браузера.
Вы можете сделать это с помощью подпапок (example /css/v1/style.css) или по имени файла (example: css/style_v1.css) или даже установив разные папки для вашего сайта, например:
www.mywebsite.com/site1 www.mywebsite.com/site2 www.mywebsite.com/site3
И используйте .htaccess или даже измените httpd.conf для перенаправления в ваше текущее приложение.
Если о one изображение или страница:
Вы можете использовать $ time для частей, когда не хотите кешировать. Таким образом, он всегда будет вытягивать новое изображение. Версионирование кажется лучшим подходом, иначе он может перегрузить ваш сервер. Помните, что кеш браузера полезен не только для пользователя, но и для вашего сервера.
ответ дан 25 мар ’18, в 14:03
Очистка кэша php?
Пишу сайт. Хочу чтобы при его посещении кэш очищался и все изменения в css, страницах сразу менялись на новые и юзеру не приходилось чистить кэш вручную. Как это реализовать на php, есть какая-либо функция?
Простой 5 комментариев
так зачем пользователю заново каждый раз качать новые версии файлов? вы выкладываете обновление так сказать css и js и добавляете например в конце пути к файлу .js?v=12 следущее уже обновление например .js?v=13
К ответу выше: чтобы постоянно не обновлять версию файла вручную, добавляйте параметром дату его последнего изменения, например, в Unix timestamp формате
. .css?v=1614956872
Примерно так:
Запрос вида /css/style.css
обрабатывается неким контроллером, назовём его контроллер CSS.
Т.е. если с сервера запрашивается адрес /css/style.css, на самом деле вызывается php скрипт, в который передаётся аргумент, строка «style.css» (гугли mod_rewrite или единая точка входа).
Далее, в контроллере CSS ты смотришь дату изменения этого файла style.css:
function getModificationTime($path_to_file) < return (new Datetime())->setTimestamp(filemtime('/my/style/paths/' . $path_to_file)); > $modify_date = getModificationTime('styles.css');
Далее, в этом контроллере ты проверяешь, пришёл ли от браузера заголовок HTTP_IF_MODIFIED_SINCE (погугли, что это).
/** * Возвращает true, если дата (обычно документа) $data является устаревшей * по отношению к HTTP заголовку If-Modified-Since. * * @param $date \DateTime * @return bool */ public static function IfModifiedSince(\DateTime $date): bool < if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) < $if_modified_since = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5)); if ($if_modified_since && $if_modified_since >= $date->getTimestamp()) < return false; >> return true; >
если true, считываешь css файл и выплёвываешь его посредством этого контроллера (через echo), отправляя http заголовки, присущие для css (‘text/css; charset=utf-8’) и заголовок Last-Modified с датой $modify_date в формате «D, d M Y H:i:s \G\M\T»
если false (файл не изменился) просто отдаешь http заголовок 304
этой информации тебе достаточно, что бы самостоятельно всё самому реализовать
Как очистить кеш браузера при повторной загрузке изображения с тем же именем файла, в php?
У меня есть список элементов, который также содержит миниатюру изображения. Иногда мне нужно изменить уменьшенное изображение, но сохраняйте имя файла одинаково. Есть ли способ заставить браузер загружать недавно загруженное изображение, а не захватывать его из кеша браузера?
Это очень актуально, когда люди обновляют свои аватары, что вызывает недоумение для некоторых пользователей, которые продолжают видеть свой старый аватар, пока не очистят кеш браузера или не перезагрузите браузер.
Добавить уникальный номер в конец изображения src
делать это только в форме для обновления аватара
btw, это хорошо работает для принудительного обновления других статических файлов
Вы можете использовать время модификации файла:
когда файл будет изменен, будет очищен кеш клиента
Вы можете аннулировать кеш для всей страницы, изменив заголовки :
При отправке изображения не отправляйте заголовок Expires . Также рассмотрите отправку этого заголовка кэша:
Cache-Control: must-revalidate
Это заставит браузер запрашивать ваш сервер для изображения каждый раз. Следите за заголовком If-Modified-Since в запросе; если изображение не изменено, ответьте 304 HTTP-кодом.
Вся эта процедура (необходимо-revalidate, If-Modified-Since, 304 answer) позволит браузеру кэшировать содержимое изображения, но в то же время спросить ваш сервер, изменился ли файл.
Другое, может быть, более простое решение – установить заголовок Expires на короткое время в будущем , например десять минут, и сообщить пользователю о десятиминутной задержке. Это ускорит загрузку большинства загрузок, так как нет необходимости делать HTTP-запрос для изображения вообще.
Кэшированные изображения также недействительны при обновлении страницы вручную (нажатие F5 в браузере). Это можно моделировать с помощью метода javascript location.reload (), который запускается при загрузке тела. Чтобы избежать постоянной перезагрузки, это может иметь место только один раз. Когда пользователь загружает новый аватар, запрос ReloadPending постоянно устанавливается в его / ее сеансе, и он сбрасывается, когда на него был дан ответ.
Перезагрузка всей страницы после загрузки аватара вызовет мерцание страницы, но это происходит только один раз, что, я считаю, приемлемо.
Я узнал, что одним из лучших способов сделать это является наличие того же URL-адреса для получения и публикации изображения (REST).
POST / my / image (Cache-control: no-cache, must-revalidate)
GET / my / image (Cache-control: must-revalidate)