Обновить файл 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. Если файл не изменен, то время остается неизменным, и браузер использует кэшированную версию файла.