Как установить заголовки HTTP (для контроля кэша)? - PullRequest
225 голосов
/ 19 декабря 2010

Как включить кэширование браузера для моего сайта? Должен ли я просто поместить контроль кэша: public где-то в моем заголовке, как это?

<!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.

Ответы [ 8 ]

187 голосов
/ 19 декабря 2010

Чтобы использовать контроль кэша в HTML, вы используете метатег , например,

<meta http-equiv="Cache-control" content="public">

Значение в поле содержимого определяется как одно из четырех значений ниже.

Некоторая информация о заголовке Cache-Control выглядит следующим образом

HTTP 1.1.Допустимые значения = PUBLIC |ЧАСТНЫЙ |Без кэша |НЕТ-МАГАЗИНА.

Public - может кэшироваться в общедоступных общих кэшах.
Private - может кэшироваться только в частном кэше.
No-Cache - не может кэшироваться.
No-Store - может бытькэшируется, но не архивируется.

Директива CACHE-CONTROL: NO-CACHE указывает, что кэшированная информация не должна использоваться, и вместо этого запросы должны перенаправляться на исходный сервер.Эта директива имеет ту же семантику, что и PRAGMA: NO-CACHE.

Клиенты СЛЕДУЕТ включать PRAGMA: NO-CACHE и CACHE-CONTROL: NO-CACHE, когда запрос на отсутствие кэширования отправляется на сервер, не известный как HTTP / 1.1-совместимый.Также смотрите EXPIRES.

Примечание. Возможно, лучше указывать команды кэширования в HTTP, чем в операторах META, где они могут влиять не только на браузер, но на прокси и других посредников, которые могут кэшировать информацию.

127 голосов
/ 20 декабря 2010

Вы можете установить заголовки в 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)

?>

Обратите внимание, что точные используемые заголовки будут зависеть от ваших потребностей (и если вам потребуется поддержка HTTP1,0 и / или HTTP 1,1 )

44 голосов
/ 05 октября 2011

Как я уже писал (в http://www.williamferreira.net/blog/2011/10/04/controle-de-cache-apache/) лучше всего использовать файл .htacces. Однако остерегайтесь времени, когда вы оставляете содержимое в кэше.

Использование:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

Где: 604800 = 7 дней

PS: Это можно использовать для сброса любого заголовка

29 голосов
/ 01 мая 2011

На странице http://www.askapache.com/htaccess/apache-speed-cache-control.html предлагается использовать что-то вроде этого:

Добавить заголовки управления кэшем

Это входит в корневой файл .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>
17 голосов
/ 18 ноября 2016

Это лучшее .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>
13 голосов
/ 19 декабря 2010

Для сервера Apache вы должны проверить mod_expires для установки заголовков Expires и Cache-Control.

Кроме того, вы можете использовать директиву Header , чтобы добавить Cache-Control самостоятельно:

Header set Cache-Control "max-age=290304000, public"
5 голосов
/ 22 октября 2015

OWASP рекомендует следующее,

Когда бы ни было возможно, убедитесь, что заголовок HTTP для управления кешем установлен в no-cache, no-store, must-revalidate, private; и что заголовок прагмы HTTP установлен без кэша.

<IfModule mod_headers.c>
    Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
    Header set Pragma "no-cache"
</IfModule>
5 голосов
/ 05 декабря 2012

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

Допустимые значения:

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

...