Как установить заголовки срока действия для CSS, JS и изображений?

38

Я недавно проанализировал свой сайт с аддоном pagepeed на firebug. Он предложил мне установить срок действия CSS, JS и файлов изображений.

Мне интересно, как мне это сделать?

KoolKabin
источник

Ответы:

37

Обновите конфигурацию Apache, чтобы включить приведенные ниже директивы как часть вашей базовой конфигурации :

# 
# associate .js with "text/javascript" type (if not present in mime.conf)
# 
AddType text/javascript .js

# 
# configure mod_expires
# 
# URL: http://httpd.apache.org/docs/2.2/mod/mod_expires.html
# 
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType image/x-icon "access plus 2692000 seconds"
    ExpiresByType image/jpeg "access plus 2692000 seconds"
    ExpiresByType image/png "access plus 2692000 seconds"
    ExpiresByType image/gif "access plus 2692000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2692000 seconds"
    ExpiresByType text/css "access plus 2692000 seconds"
    ExpiresByType text/javascript "access plus 2692000 seconds"
    ExpiresByType application/x-javascript "access plus 2692000 seconds"
    ExpiresByType text/html "access plus 600 seconds"
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>

# 
# configure mod_headers
# 
# URL: http://httpd.apache.org/docs/2.2/mod/mod_headers.html
# 
<IfModule mod_headers.c>
    <FilesMatch "\\.(ico|jpe?g|png|gif|swf|css|js)$">
        Header set Cache-Control "max-age=2692000, public"
    </FilesMatch>
    <FilesMatch "\\.(x?html?|php)$">
        Header set Cache-Control "max-age=600, private, must-revalidate"
    </FilesMatch>
    Header unset ETag
    Header unset Last-Modified
</IfModule>
Джон Конде
источник
Я получаю 500 Внутренняя ошибка сервера, когда я
помещаю
Ваша установка Apache может не поддерживать все опции, перечисленные выше. Я скоро обновлю этот ответ, чтобы помочь решить эту проблему.
Джон Конде
Мой Drupal содержит ссылки на javascript / css, такие как: www.example.com/misc/jquery.js?v=1.4.4 или www.example.com/sites/all/modules/nice_menus/css/nice_menus.css?mtu293, это похоже, не работает для таких файлов. Это обновлено на сегодня?
AgA
2
@JohnConde Почему и истекает срок действия и заголовки? Кроме того, при обновлении изображения или CSS, например, нужно ли переименовывать файл? Или для css файла работает версионность: test.css? 123?
воскресенье
14

Вы можете поместить это в свой htaccess:

<FilesMatch "(?i)^.*\.(ico|flv|jpg|jpeg|png|gif|js|css)$">
ExpiresActive On
ExpiresDefault A2592000
</FilesMatch>

Он будет нацелен на файлы с этими расширениями (ico, flv, jpg и т. Д.) И установит для заголовка Expires время доступа (A) плюс 30 дней (2592000 секунд). Вы также можете добавить это на уровне сервера, если у вас есть доступ к этому.

DisgruntledGoat
источник
2

Это зависит от хоста и способа сервера этих вещей. Вариант 1) если вы управляете сервером, сделайте apache для добавления заголовков истечения срока действия в ответ Вариант 2) если вы не управляете веб-сервером, или вы используете сервер images / js / css / etc, вы можете установить эти заголовки из сценария, который сервер их

Имейте в виду, что эти советы рекомендуются, но не являются абсолютной истиной. Они больше для экономии трафика, чем для ускорения вашего сайта. Так что если у вас низкий трафик на ваш сайт, не беспокойтесь об этом.

Илиан Илиев
источник
Я с вариантом 2. Как мне установить эти заголовки из сценария. Сценарий означает php или какой?
KoolKabin
Вы можете проверить stackoverflow.com/questions/2185449/… это пример Python, но если вы знакомы с программированием, я думаю, вы поймете идею. В php вам придется использовать заголовки (). Но имейте в виду, что в этом случае все «статические» файлы должны будут обслуживаться через скрипт, который увеличит вашу квоту процессора. Теперь до меня доходит, что есть 3-й вариант. Используйте CDN для этих файлов.
Илиан Илиев
2

Настройка срока действия в веб-сервере Lightspeed

Войдите в консоль администратора, затем> Сервер-> Общие-> Настройки с истекшим сроком действия> Срок действия по типу

Добавьте следующее:

text/css=A604800, text/javascript=A604800, application/javascript=A604800, application/x-javascript=A604800, application/x-shockwave-flash=A604800, image/gif=A604800, image/jpg=A604800, image/jpeg=A604800, image/png=A604800, image/ico=A604800, image/icon=A604800

604800 - это секунды истечения срока действия, которые должны соответствовать вашим потребностям, поскольку его 168 часов, то есть 7 дней. Кроме того, Light Speed ​​Server использует htaccess, в который необходимо добавить следующую строку:

ExpiresActive On

В качестве альтернативы, если у вас нет доступа к консоли администратора, попробуйте следующий файл .htaccess:

  ExpiresByType image/png A604800
  ExpiresByType image/gif A604800
  ExpiresByType image/jpg A604800
  ExpiresByType image/jpeg A604800
  ExpiresByType text/javascript A604800
  ExpiresByType application/x-javascript A604800
  ExpiresByType text/css A604800
Саймон Хейтер
источник