Хочется рассказать об одном неприятном баге, присутствующем во втором
апаче.
С тех пор, как в поставку сервера добавили mod_deflate, и до сего
момента, за ним тянется следующий баг. Сервер выдаёт строку заголовка
Vary Accept-Encoding в любом случае, даже если строка "Content-Encoding gzip"
в его ответе отсутствует (ответ - несжатый).
Что при этом получается. На рынке броузеров лидирует ИЕ. Несжатые
ответы с любым "Vary", но без "Content-Encondig" вообще не
кэшируются MSIE. Т. е. - перестаёт работать кеширование в броузере.
Идём дальше. В большинстве случаев, при выполнении запроса через
прокси сервер, MSIE 5.5 и выше, не передаёт в заголовке запроса строки
"Accept-Encoding", т. к. опция "использовать HTTP 1.1 через прокси",
по умолчанию, в настройках броузера отключена. Пусть несжатая
статическая страница сохранена в кеше сквида или ещё какого прокси.
Если в заголовке запросе ИЕ нет "Accept-Encoding gzip, deflate"
то эта страница не будет отдана из кеша прокси, т. к. для её отдачи
поставлено условие - наличие в заголовке запроса "Accept-Encoding". Т.
е. - перестаёт работать кеширование несжатой статики прокси сервером.
Что мы имеем. Полностью перестаёт работать кеширование страниц как
броузером, так и прокси.
Как я это пофиксил:
# Do not sent Vary without Content-Encoding in request
SetEnvIf User-Agent .* force-no-vary
SetEnvIf Accept-Encoding gzip !force-no-vary
SetEnvIf Accept-Encoding deflate !force-no-vary
Хочется верить, что когда нибудь, это пофиксят и разработчики самого
апаче.
Подробнее о работе HTTP компрессии можно почитать на сайте Игоря
Сысоева - разработчика mod_deflate для первого апача.