Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > кэш


Автор: bars80080 28.7.2011, 12:27
кто-нибудь может мне рассказать, как заставить браузер не запрашивать постоянно страницу с сервера?

прочитал много всякого в интернете, толку ноль
основное, что вытащил, должно хватать:

Код

    header('Expires: '.gmdate('D, d M Y H:i:s', (time() + 3600)).' GMT');
    header('Cache-control: private');


при проверке на локальном сервере, наблюдаю в файерфоксе следующее:

Код

Date    Thu, 28 Jul 2011 09:01:27 GMT
Server    Apache/2.2.9 (Win32) PHP/5.2.6
X-Powered-By    PHP/5.2.6
Expires    Thu, 28 Jul 2011 10:01:27 GMT
Cache-Control    private
Keep-Alive    timeout=5, max=100
Connection    Keep-Alive
Transfer-Encoding    chunked
Content-Type    text/html; charset=utf-8


при следующем заходе на ту же страницу вижу запрос серым цветом, а заголовки изменились:
Код

Date    Thu, 28 Jul 2011 09:01:27 GMT
Server    Apache/2.2.9 (Win32) PHP/5.2.6
X-Powered-By    PHP/5.2.6
Expires    Thu, 28 Jul 2011 10:01:27 GMT
Cache-Control    private
Content-Type    text/html; charset=utf-8

как я понимаю, кэш отработал, запроса на сервер не произошло

но если я снова захожу на эту страницу, то запрос помечается чёрным цветом, заголовок опять же как в первом случае, только Expires изменяется на новое.
как я понимаю, запрос на сервер произошёл

как заставить браузер удерживать страницу столько, сколько надо?



заголовок
Cache-control: max-age=3600
никак не влияет

разъясните, пожалуйста, также следующий момент:
если выставлен Cache-Control: public, значит ли это, что браузер всё равно должен кэшировать, а не только прокси-сервера?

и ещё вопрос:
при проверке страницы с внешнего хостинга, даже подобное кэширование "через раз" не работает, заголовки всегда такие:
Код

Via    1.1 SBSRV
Connection    Keep-Alive
Proxy-Connection    Keep-Alive
Transfer-Encoding    chunked
Expires    Thu, 28 Jul 2011 10:23:41 GMT
Date    Thu, 28 Jul 2011 09:23:41 GMT
Content-Type    text/html; charset=utf-8
Server    Apache/2.2.17 (Unix) PHP/5.2.17
X-Powered-By    PHP/5.2.17
Cache-Control    private
Pragma    no-cache
Set-Cookie    PHPSESSID=89267ff8ea4eb80db18cccea1786b; path=/

причём, Pragma no-cache я не выставляю, видимо сервер сам докидывает.
но какое значение может иметь Pragma, если она только для прокси?

каким образом, можно принудительно запретить отправку заголовка pragma?
желательно из пхп, а не директивой на сервере

Автор: Sanchezzz 31.7.2011, 03:37
скорее всего у mod_headers не дает тебе избавится от кеша.

попробуй через htaсcess через mod_expires + mod_headers

и еще то что туебя header('Expires: '.gmdate('D, d M Y H:i:s', (time() + 3600)).' GMT'); разный поэтому он дергает ее постоянно 


htaсcess
Код

ExpiresActive On
ExpiresDefault A0

# 3 HOUR
<FilesMatch "\.(txt|xml|js|css)$">
ExpiresDefault A10800"
</FilesMatch>


http://www.askapache.com/htaccess/speed-up-your-site-with-caching-and-cache-control.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)