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 и вам не нужно вносить исправления

Другие вопросы по тегам