Есть несколько уровней кэширования между субъектами системы (браузер, возможные прокси, наш фронтенд, бэкенд):
dynamic storage p r o x i e s | ------------- Browser <--> |||| <--->Frontend <---> | <..........> Backend | / \ | / dynamic | Mason Cache | document (cache_self) | | | | | | component cache +---------------------------- virtual quasi-static storage
Практика показывает, что mod_accel выдает все хорошо наружу, поэтому нам нужно заботиться только о том, чтобы бэкенд правильно сформировал заголовки, на основе которых, фронтенд смог бы определить что делать с ответом - просто отдать клиенту, или еще положить в свой кэш на некоторый период времени. Тем более, что возможные промежуточные прокси могут делать совершенно немыслимые вещи и нет смысла заботиться о тонкой настройке заголовков ответа :)
Со стороны бэкенда нам имеет смысл заботиться в основном о кэшировании страницы целиком, так как именно этот кэш может служить для фронтенда как-бы хранилищем (виртуальным) документов. Страница может находиться в этом кэше во многих экземплярах в зависимости от аргументов (параметров). Конечно, не все параметры влияют на содержание страницы, поэтому их правильный выбор весьма важен. Кэш подкомонентов не так интересен, можно просто выбрать некоторое разумное время, скажем час. Это кэш используется только когда истечет время кэша всего документа, что должно быть не очень часто.
Конечно, есть запросы, которые должны обрабатываться динамически, например, авторизационные.
Основные загловки, о которых надо заботиться:
Картинки у нас обслуживаются отдельным сервером, который надо настроить для выдачи реальной даты Last-Modified
и Expires
(что-нибудь около месяца). thttpd это может делать.
Ссылки (проверить):