Браузер не слушает заголовки, отправленные PHP для кеширования, что можно изменить? - PullRequest
1 голос
/ 30 января 2012

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

Например:

  1. Пользователь А посещает веб-сайт URL http://www.example.com/home/
  2. Сервер не находит кеш
  3. Сервер генерирует страницу
  4. Сервер записывает страницу в кеш
  5. Сервер возвращает сгенерированную страницу пользователю A
  6. Пользователь А счастлив

и

  1. Пользователь B посещает веб-сайт URL http://www.example.com/home/
  2. Сервер находит кеш
  3. Сервер возвращает кэш вместо генерации страницы снова
  4. Пользователь Б счастлив

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

  1. Пользователь A посещает URL http://www.example.com/home/ снова
  2. Браузер имеет эту страницу в кеше
  3. Браузер загружает страницу для пользователя из кеша

Я не могу заставить последний работать. При генерации исходной страницы я отправляю пользователю со страницы следующие заголовки:

header('Cache-Control: public, max-age=10000, must-revalidate');
header('Expires: Fri, 03 Feb 2012 01:59:45 GMT');

Но когда я проверяю это с помощью Firebug или Chrome Developer Tools, он не говорит, что использует кеш, вместо этого снова запрашивая данные с сервера. Я знаю, что, должно быть, я делаю что-то не так, поскольку у меня есть те же настройки для статических файлов, как Javascript, и это работает.

Чтобы проверить это, я не просто попытался перезагрузить страницу, я создал ссылки на веб-сайте и перемещался между теми ссылками, которые он каждый раз запрашивал для страниц с сервера.

Я что-то упустил?

EDIT:

Хорошо, очевидно, что сервер отправлял "Pragma: no-cache" автоматически каждый раз. Кто-нибудь знает, почему сервер будет делать это? Это не позволило браузеру использовать кеш.

Ответы [ 2 ]

2 голосов
/ 17 октября 2012

если вы используете session_start, PHP добавит

Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

. Весь смысл PHP в том, чтобы в конце концов обеспечить динамические страницы.

, чтобы остановить это ...

session_cache_limiter(''); 
session_start();

и затем вы можете написать свои собственные заголовки, основываясь на предоставленном вами контенте

2 голосов
/ 01 октября 2012

Если для этой страницы / URL включен сеанс, заголовок Pragma: no-cache будет добавлен в заголовок http, что запрещает браузеру использовать кеш.

...