Apache кеш, обслуживающий частичное содержимое 206 ответов на запросы о полном содержании
Мы запускаем Plone 3.3.6 за Apache 2.2.19 с mod_cache. Недавно мы заметили, что Apache кэширует ответ 206 на запрос диапазона и затем обрабатывает этот частичный ответ, когда сделан запрос на полный ресурс.
Что, кажется, происходит:
- какой-то клиент делает запрос диапазона для ресурса, который еще не находится в кеше или находится в кеше, но срок его действия истек
- Апач правильно обслуживает ответ 206
- другой клиент делает стандартный запрос на тот же ресурс
- Apache обслуживает тот же ответ 206 для этого второго клиента: он должен обслуживать весь ответ с 200
Это вызывает проблемы с нашим CSS на некоторых сайтах очень редко
Я могу повторить это последовательно: я написал небольшой скрипт на Python, чтобы сделать запрос диапазона.
Я не думаю, что мы не делаем ничего необычного с нашей конфигурацией Apache. Мы используем конфигурацию обратного прокси-сервера для обслуживания страниц из Plone. Конфигурация Apache, относящаяся к mod_cache, выглядит следующим образом:
CacheEnable disk /
CacheDisable /static
CacheDisable /sitemap.xml.gz
CacheDisable /robots.txt
CacheIgnoreHeaders Set-Cookie
UseCanonicalName On
RequestHeader edit Accept-Encoding ^.*gzip.*$ gzip early
RequestHeader edit Accept-Encoding ^(?!gzip).*$ "" early
Руководство по кэшированию Apache не содержит 206 ответов в списке кодов состояния, которые "должен иметь" ответ для его кэширования. Is this a bug in Apache or are we doing something wrong in the configuration?
2 ответа
Это ошибка Apache 49113, и она была исправлена в багажнике, но не в 2.2.19.
Это исправлено в Apache 2.2.23. Обновитесь до 2.2.23 и вам не нужно вносить исправления