Как настроить заголовки HTTP (для управления кешем)?
Как включить кеширование браузера для моего сайта? Я только что поставил кеш-контроль: публично где-то в моем заголовке?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
Cache-Control:public;
>
Я использую последнюю версию PHP, разрабатывающую последнюю версию XAMPP.
Ответы
Ответ 1
Чтобы использовать кеш-контроль в HTML, вы используете метатег например
<meta http-equiv="Cache-control" content="public">
Значение в поле содержимого определяется как одно из четырех значений ниже.
Некоторая информация о заголовке Cache-Control
выглядит следующим образом
HTTP 1.1. Допустимые значения = PUBLIC | ЧАСТНЫЕ | NO-CACHE | НЕТ-МАГАЗИНА.
Публикация - может быть кэширована в общедоступных кэшах.
Частный - может кэшироваться только в частном кеше.
No-Cache - не может быть кэширован.
No-Store - может храниться в кеше, но не архивироваться.
Директива CACHE-CONTROL: NO-CACHE указывает, что кешированная информация не должна использоваться и вместо этого запросы должны быть отправлены на исходный сервер. Эта директива имеет ту же семантику, что и PRAGMA: NO-CACHE.
Клиенты ДОЛЖНЫ включать PRAGMA: NO-CACHE и CACHE-CONTROL: NO-CACHE, когда запрос на отсутствие кеша отправляется на сервер, который не известен как HTTP/1.1. Также смотрите EXPIRES.
Примечание. Может быть лучше указать команды кеша в HTTP, чем в операторах META, где они могут влиять больше, чем браузер, но прокси и другие посредники, которые могут кэшировать информацию.
Ответ 2
Вы можете установить заголовки в PHP, используя:
<?php
//set headers to NOT cache a page
header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
header("Pragma: no-cache"); //HTTP 1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
//or, if you DO want a file to cache, use:
header("Cache-Control: max-age=2592000"); //30days (60sec * 60min * 24hours * 30days)
?>
Обратите внимание, что используемые точные заголовки будут зависеть от ваших потребностей (и если вам нужно поддерживать HTTP 1.0 и/или HTTP 1.1)
Ответ 3
Как я уже писал, лучше всего использовать файл .htaccess
. Однако остерегайтесь того времени, когда вы оставляете содержимое в кэше.
Использование:
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
Где: 604800 = 7 дней
PS: это может быть использовано для сброса любого заголовка
Ответ 4
Страница на http://www.askapache.com/htaccess/apache-speed-cache-control.html предлагает использовать что-то вроде этого:
Добавить заголовки Cache-Control
Это идет в вашем корневом файле .htaccess, но если у вас есть доступ к httpd.conf, что лучше.
Этот код использует директиву FilesMatch и директиву Header для добавления заголовков Cache-Control к определенным файлам.
# 480 weeks
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</FilesMatch>
Ответ 5
Это лучший .htaccess
, который я использовал на моем настоящем сайте:
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
##Tweaks##
Header set X-Frame-Options SAMEORIGIN
## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##
<IfModule mod_headers.c>
Header set Connection keep-alive
<filesmatch "\.(ico|flv|gif|swf|eot|woff|otf|ttf|svg)$">
Header set Cache-Control "max-age=2592000, public"
</filesmatch>
<filesmatch "\.(jpg|jpeg|png)$">
Header set Cache-Control "max-age=1209600, public"
</filesmatch>
# css and js should use private for proxy caching https://developers.google.com/speed/docs/best-practices/caching#LeverageProxyCaching
<filesmatch "\.(css)$">
Header set Cache-Control "max-age=31536000, private"
</filesmatch>
<filesmatch "\.(js)$">
Header set Cache-Control "max-age=1209600, private"
</filesmatch>
<filesMatch "\.(x?html?|php)$">
Header set Cache-Control "max-age=600, private, must-revalidate"
</filesMatch>
</IfModule>
Ответ 6
Для сервера Apache вы должны проверить mod_expires для установки заголовков истечения срока действия и кэша.
В качестве альтернативы вы можете использовать Header, чтобы добавить Cache-Control самостоятельно:
Header set Cache-Control "max-age=290304000, public"
Ответ 7
Мета-тег управления кешем позволяет веб-издателям определять, как страницы должны обрабатываться кешами. Они включают в себя директивы для объявления того, что должно быть кэшировано, что может храниться в кэше, модификации механизма истечения срока действия, а также повторной проверки и
перезагрузите элементы управления.
Допустимые значения:
Public - может быть кэширован в общедоступных общих кешах
Приватный - может быть кэширован только в приватном кеше
no-Cache - не может быть кэширован
no-Store - может быть кэширован, но не заархивирован
Пожалуйста, будьте осторожны с чувствительностью к регистру. Добавьте следующий метатег в источник вашей веб-страницы. Разница в написании в конце тега заключается в том, что вы используете "/> = xml или"> = html.
<meta http-equiv="Cache-control" content="public">
<meta http-equiv="Cache-control" content="private">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache-control" content="no-store">
Source-> MetaTags
Ответ 8
OWASP рекомендует следующее:
По возможности убедитесь, что HTTP-заголовок управления кешем установлен без кеша, no-store, must-revalidate, private; и что HTTP-заголовок pragma устанавливается без кэша.
<IfModule mod_headers.c>
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</IfModule>