3

I have a problem with mod_cache and ETags. Here's my scenario:

Environment: Firefox, Apache 2.2.22 (Mac OSX default), any Web App, Apache is a proxy to the Web App

Initial State:

  • Browser has an (expired) cache version of doc /aaa, ETag=123
  • Apache has an (expired) cache version of doc /aaa, ETag=123

Scenario:

  • Browser requests /aaa, If-None-Match: 123
  • Apache requests /aaa, If-none-Match: 123 from Web App
  • Web App returns 304
  • Apache returns his cached version to the Browser (200)

Shouldn't Apache return 304 to the Browser?

Additional Info:

  • if Apache has no cached version of /aaa, he forwards the ETag to Web App, get 304, and returns 304 to the Browser
  • working with Last-Modified/If-Modified-Since instead of ETags works (after getting 304 from the Web App, Apache returns 304 to the Browser)

A much simpler scenario:

  • Apache version is not expired (ETag: 123) - he doesn't need to get a refresh from Web App
  • GET /aaa, If-None-Match: 123
  • Response: 200 (instead of 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

Request/Response Headers:

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
alex.net
  • 286
  • 1
  • 6
  • Can you add the relevant config? And the exact headers of all requests and responses that produce this? – Colin 't Hart Oct 01 '13 at 16:38
  • I have the same problem for a very long time and was not able to fit it :( – Sebastien Lorber Sep 07 '15 at 09:11
  • Are you using gzip (and if not why not!)? Not if your request/response headers but not sure if that's a reduced set. If so try turning Etags off and it should work as there is a bug in Apache with Etags and Gzip. Will explain more in an answer if this turns out to be the case. – Barry Pollard Oct 24 '15 at 13:53

1 Answers1

1

According to protocol specification the If-None-Match header should be wrapped with ".

Try sending:

If-None-Match: "123"
JakubKnejzlik
  • 6,363
  • 3
  • 40
  • 41