mod_cache + ETag: Apache не отвечает 304 клиенту

У меня проблема с mod_cache и ETags. Вот мой сценарий:

Среда: Firefox, Apache 2.2.22 (Mac OSX по умолчанию), любое веб-приложение, Apache является прокси для веб-приложения.

Начальное состояние:

  • Браузер имеет (просроченную) версию кеша doc /aaa, ETag=123
  • Apache имеет (просроченную) версию кеша doc /aaa, ETag=123

Сценарий:

  • Запросы браузера / AAA, если-нет-совпадение: 123
  • Apache запрашивает /aaa, If-none-Match: 123 от Web App
  • Веб-приложение возвращает 304
  • Apache возвращает свою кешированную версию в браузер (200)

Разве Apache не должен вернуть 304 браузеру?

Дополнительная информация:

  • если у Apache нет кэшированной версии / aaa, он перенаправляет ETag в Web App, получает 304 и возвращает 304 в браузер
  • работа с Last-Modified/If-Modified-Since работает вместо ETags (после получения 304 из Web-приложения Apache возвращает 304 в браузер)

Гораздо более простой сценарий:

  • Версия Apache не устарела (ETag: 123) - ему не нужно получать обновление из Web App
  • ПОЛУЧИТЬ / ааа, если-нет-совпадение: 123
  • Ответ: 200 (вместо 304?)

Apache Conf

CacheRoot /private/var/log/apache2/cache/
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3
CacheIgnoreCacheControl On
CacheIgnoreHeaders Set-Cookie

<Proxy *>
   Order deny,allow
   Allow from all
</Proxy>

ProxyPass / ajp://localhost:8009/ retry=0
ProxyPassReverse / ajp://localhost:8009/
ProxyPreserveHost on

Заголовки запроса / ответа:

GET / HTTP/1.1
Accept: */*
If-None-Match: 123456

HTTP/1.1 200 OK
Date: Tue, 01 Oct 2013 14:01:16 GMT
ETag: 123456
Expires: Tue, 01 Oct 2013 14:30:55 GMT
Cache-Control: max-age=1800
Content-Language: en-US
Age: 21
Content-Length: 20186
Content-Type: text/html;charset=UTF-8

1 ответ

Согласно спецификации протокола заголовок If-None-Match должен быть заключен в ".

Попробуйте отправить:

If-None-Match: "123"
Другие вопросы по тегам