@leham1

Как настроить кэширование сайта?

Здравствуйте.
Обновил сайт, но браузер показывает прошлый контент, так как он его закэширован. Точнее текст меняется, но стили не меняются (возможно потому-что они находятся в файле .css).
У себя то я удалю кэш, но хотел бы понять как сделать чтобы и у других пользователей обновился мой сайт, а не брался из кэша.
Пробовал такие варианты вставлять в код (но они не работают почему-то):

вариант 1:
<meta http-equiv="Cache-Control" content="no-cache">


вариант 2:
<meta http-equiv="Cache-Control" content="max-age=3600, must-revalidate">


вариант 3:
<meta name="expires" content="Sun, 06 Dec 2020 18:40:04 GMT">


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

Вообще у меня index.php но пробовал изменить и на index.html. Тоже не помогло...

В это место страницы index вставлял варианты:
635c15efe0f49579619743.png
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
Newto
@Newto
<link href="css/index.css?<?= time(); ?>" rel="stylesheet">
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
php666
@php666
PHP-макака
делал так:

все css/js ресурсы внедряются в хтмл посредством хэлпера:

<?= $this->getCss('local', 'backend.css') ?>

а отдаются через контроллер:

class Css extends Controller
{
    public function run()
    {
        $paths = [
            Application::getAnchor($this->getRequest()->getRequest('module'))::getPath(),
            'resources',
            'css',
            $this->getRequest()->getRequest('file')
        ];
        $path = implode(DIRECTORY_SEPARATOR, $paths);

        try {
            $resource = new ResourceCss($path);
            $resource->checkMieType();

            $this->getResponse()
                ->unsetHeader(Response::HEADER_LAST_MODIFIED)
                ->unsetHeader(Response::HEADER_EXPIRES)
                ->unsetHeader(Response::HEADER_CACHE_CONTROL)
                ->unsetHeader(Response::HEADER_PRAGMA);

            if (!Request::IfModifiedSince($resource->getModificationTime())) {
                return $this->getResponse()->setHttpStatusCode(304);
            }

            $this->getResponse()
                ->setHeader(Response::HEADER_CONTENT_TYPE, 'text/css; charset=utf-8')
                ->setHeader(Response::HEADER_LAST_MODIFIED, $resource->getModificationTime()->formatHttpDate())
                ->setHeader(Response::HEADER_CACHE_CONTROL, 'no-cache, must-revalidate');

            return $resource;
        } catch (\Exception $e) {
            throw $e;
        }
    }
}


суть в том, что контроллер проверяет last modified since запрошенного css
если не изменился - отдает 304, если изменился - читаем файл, посылает новый Last-Modified и отдает его.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы