Kaj Nielsen created COUCHDB-2259:
------------------------------------
Summary: CouchDB 1.6.0 returns wrong Vary
Key: COUCHDB-2259
URL: https://issues.apache.org/jira/browse/COUCHDB-2259
Project: CouchDB
Issue Type: Bug
Security Level: public (Regular issues)
Components: HTTP Interface
Reporter: Kaj Nielsen
CouchDB documents are immutable. Even when deleted, a new revision is assigned
to the document (and the _deleted flag is set).
As such, HTTP requests for specific document revisions, by use of the If-Match
header, are cacheable.
HTTP requests with no revision numbers are not cacheable.
Therefore, for If-Match requests, the correct caching headers are:
- Vary: If-Match
- no Cache-Control header (or a default value, eg. 24hrs)
And for "non-revisioned" requests, the correct headers are:
- Vary: If-Match
- Cache-Control: must-revalidate
However:
> GET /db/doc HTTP/1.1
> Host: localhost:5984
> If-Match: 167-37f82fdbfdc49d38b1c66815deb1e338
>
< HTTP/1.1 200 OK
< Server: CouchDB/1.6.0 (Erlang OTP/R15B01)
< ETag: "167-37f82fdbfdc49d38b1c66815deb1e338"
< Date: Tue, 24 Jun 2014 22:34:20 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 649
< Cache-Control: must-revalidate
<
...
As seen above, even when requesting a very specific revision of a document,
CouchDB still requests revalidation with "must-revalidate".
Thereby making modern HTTP caches unable to take advantage of caching the
(potentially large) body of HTTP transactions that are perfectly cacheable
(because the request include If-Match).
Also, CouchDB incorrectly does not discern the request from a non-revisioned
request with regards to the "must-revalidate" cache-control header.
"must-revalidate" should not be set on responses where If-Match is present in
the request.
--
This message was sent by Atlassian JIRA
(v6.2#6252)