У меня есть система, где у меня есть двухслойный кеш на сайте. Каждый запрос проверяет наличие кэша на веб-сервере и, если он находит сгенерированную страницу, которая была кэширована, он возвращает кэш, а не генерирует его снова.
Например:
- Пользователь А посещает веб-сайт URL
http://www.example.com/home/
- Сервер не находит кеш
- Сервер генерирует страницу
- Сервер записывает страницу в кеш
- Сервер возвращает сгенерированную страницу пользователю A
- Пользователь А счастлив
и
- Пользователь B посещает веб-сайт URL
http://www.example.com/home/
- Сервер находит кеш
- Сервер возвращает кэш вместо генерации страницы снова
- Пользователь Б счастлив
Все это работает без проблем. Но я также хочу добавить опцию, чтобы браузер больше не пинговал сервер (экономя время серверов на проверку наличия или отсутствия кеша) и вместо этого использовал свой кеш.
- Пользователь A посещает URL
http://www.example.com/home/
снова
- Браузер имеет эту страницу в кеше
- Браузер загружает страницу для пользователя из кеша
Я не могу заставить последний работать. При генерации исходной страницы я отправляю пользователю со страницы следующие заголовки:
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" автоматически каждый раз. Кто-нибудь знает, почему сервер будет делать это? Это не позволило браузеру использовать кеш.