Кэширование файлов CSS в браузере - PullRequest
62 голосов
/ 20 января 2009

Быстрый вопрос касательно CSS и браузера. Я попытался выполнить поиск ТАК и нашел несколько похожих сообщений, но ничего определенного.

Я использую один или два файла CSS в своих веб-проектах. На них есть ссылки в заголовке моих веб-страниц. Когда я нажимаю на одну из моих страниц, кэшируется ли CSS, чтобы он не перезагружался с каждым запросом? Я надеюсь, что это так. IE, Firefox и Safari обрабатывают это по-разному? Если браузер закрыт, обновляется ли CSS при первом посещении при открытии нового экземпляра браузера?

Ответы [ 6 ]

60 голосов
/ 20 января 2009

Ваш файл будет вероятно кэшироваться - но это зависит ...

Различные браузеры ведут себя по-разному - особенно это заметно при работе с неоднозначными / ограниченными заголовками кэширования, исходящими от сервера. Если вы посылаете четкий сигнал, браузеры подчиняются практически все время.

Самая большая разница в конфигурации кэширования по умолчанию для различных веб-серверов и серверов приложений.

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

...

Итак, во-первых, прочитайте некоторые из превосходных HTTP кеширующих учебников . HTTP-кеширование и кеширование для контент-издателей стал для меня настоящим откровением: -)

Затем установите и возьмите с собой Firebug и дополнение Live HTTP Headers , чтобы узнать, какие заголовки фактически отправляет ваш сервер.

Затем прочитайте документацию своего веб-сервера, чтобы узнать, как настроить их до совершенства (или попросите своего системного администратора сделать это за вас).

...

Что происходит при перезапуске браузера, зависит от браузера и конфигурации пользователя.

Как правило, ожидайте, что браузер с большей вероятностью будет проверять сервер после каждого перезапуска, чтобы увидеть, изменилось ли что-либо (см. If-Last-Modified и If -Ни-Match ).

Если вы правильно настроите свой сервер, он сможет вернуть супер-короткую 304 Не изменено (стоит очень небольшую полосу пропускания), и после этого браузер будет использовать кеш как обычно.

41 голосов
/ 20 января 2009

К первой части вашего вопроса - да, браузеры кэшируют CSS-файлы (если это не отключено конфигурацией браузера). Многие браузеры имеют комбинацию клавиш для перезагрузки страницы без кеша. Если вы внесли изменения в css и хотите, чтобы пользователи увидели их немедленно, а не ожидали в следующий раз, когда браузер перезагрузит файлы без кэширования, вы можете изменить способ обслуживания CSS, добавив в URL некоторые параметры, например:

/style.css?modified=20012009
7 голосов
/ 20 января 2009

Это зависит от HTTP-заголовков, отправляемых с файлами CSS, как указано в обоих предыдущих ответах - до тех пор, пока вы не добавляете какие-либо данные для очистки кэша в href. например

<link href="/stylesheets/mycss.css?some_var_to_bust_cache=24312345" rel="stylesheet" type="text/css" />

Некоторые фреймворки (например, rails) вставляют их по умолчанию.

Однако, если вы получаете что-то вроде firebug или fiddler , вы можете точно видеть, что ваш браузер загружает при каждом запросе - что особенно полезно для определения того, что ваш браузер делает , в отличие от того, что должен делать.

Все браузеры должны одинаково учитывать заголовки кэша, если только не настроено их игнорирование (но обязательно должны быть исключения)

3 голосов
/ 20 января 2009

Вероятно, стоит отметить, что IE не будет кэшировать CSS-файлы, вызываемые другими CSS-файлами, используя метод @import. Так, например, если ваша html-страница ссылается на «master.css», который извлекает «reset.css» через @import, то reset.css не будет кэшироваться IE.

1 голос
/ 20 января 2009

Это зависит от того, какие заголовки вы отправляете вместе с вашими CSS-файлами. Проверьте конфигурацию вашего сервера, поскольку вы, вероятно, не отправляете их вручную. Выполните поиск в Google по запросу «http caching», чтобы узнать о различных параметрах кэширования, которые вы можете установить. Вы можете заставить браузер загружать свежую копию файла каждый раз, когда он его загружает, например, или вы можете кэшировать файл на одну неделю ...

0 голосов
/ 20 января 2009

Если вы не испортили свой сервер, да, он кешируется. Все браузеры должны обрабатывать это одинаково. Некоторые люди (например, я) могут настроить свои браузеры так, чтобы они не кэшировали файлы. Закрытие браузера не делает файл недействительным в кеше. Однако изменение файла на сервере должно привести к обновлению файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...