Обновить файл CSS в кэше?версия = XXX
чтобы обновить файл CSS в кэше, я часто использую файл.css?версия=ДДММГГГГ-трик. Однако, у меня есть вопрос об этом методе.
Я работаю над старой экстранетом. Все страницы используют один и тот же файл CSS. В экстранете нет файла шаблона, и этот css включен в каждую страницу Экстранета. Мне нужно обновить этот файл css для всех страниц Экстранета.
мой вопрос : Я хочу использовать файл.css?версия=ДДММГГГГ-трик на свой логин страница. Другие страницы по-прежнему будут содержать файл.css (без ?часть версии)
Если пользователь придет на страницу входа в систему, он получит новую версию файла css. Но какая версия будет использоваться на других страницах? Старая версия (файл.css) или новая версия (файл.css?версия=ДДММГГГГ) ?
другими словами, когда пользователь приходит на страницу входа в систему, какие файлы будут в его кэше :
- .css и файл.css?версия=ДДММГГГГ
- только файл.css, обновлен до новой версии
извините за этот вопрос новичка, но у меня есть некоторые трудности, чтобы проверить его самостоятельно.
Спасибо за вашу помощь!
3 ответов
когда файл кэшируется, он будет с полным url-адресом, включая ?
и прочее после него. Заголовки кэширования предоставляются сервером и выполняются браузером.
по сути
.css?версия=ДДММГГГГ
и
файл.в CSS
являются 2 отдельными файлами для браузера, без подключения, что так когда-либо.
мое предложение вам было бы использовать новый url последовательно на всех страницах.
Это не будет работать, они будут кэшироваться по-разному, хотя file.css
и file.css?version=DDMMYYYY
являются одним и тем же файлом в файловой системе, они разные URI, и ответ сервера может быть совершенно другим... Итак,file.css
может загрузить старый файл из кэша в то же время, что вы получите правильный файл с file.css?version=DDMMYYYY
.
способ предотвратить это может быть полностью отключить кэш, это приведет к загрузке файла css каждый раз, когда вы загружаете страницу, но даст вам мгновенное обновление, или вы можете установить срок действия кэша за короткое время, например 10 минут, 2 часа, поэтому он будет загружаться каждые 10 мин/2 часа...
если вы используете apache с включенным htaccess, вы можете сделать это, чтобы отключить кэш:
<filesMatch ".(html|htm|js|css)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>
в моем проекте я использую ?версия подход для принуждения браузера, чтобы получить новую версию файла CSS. Вместо использования ?версия=ДДММГГГГ я бы предложил использовать filemtime().
пример:
<link rel="stylesheet" href="css/custom.css?<?php=filemtime('css/custom.css')?>" type="text/css" media="screen" />
функция filemtime () получает время модификации файла, поэтому браузер получит новую версию CSS при изменении файла CSS. Если файл не изменен, то время остается неизменным, и браузер использует кэшированную версию файла.