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