Forum: Ruby rack-cache 0.3.0

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Ryan T. (Guest)
on 2008-12-29 13:14
(Received via mailing list)
rack-cache 0.3.0 is now available. This release corrects some nasty
bugs and adds support for a variety of important HTTP caching features.

From the CHANGES file:

* Add support for public and private cache control directives.
 Responses marked as explicitly public are cached even when the
 request includes an Authorization or Cookie header. Responses
 marked as explicitly private are considered uncacheable.

* Added a "private_headers" option that dictates which request
 headers trigger default "private" cache control processing. By
 default, the Cookie and Authorization headers are included.
 Headers may be added or removed as necessary to change the
 default private logic.

* Adhere to must-revalidate/proxy-revalidate cache control
 directives by not assigning the default_ttl to responses that
 don't include freshness information. This should let us begin
 using default_ttl more liberally since we can control it using
 the must-revalidate/proxy-revalidate directives.

* Use the s-maxage Cache-Control value in preference to max-age
 when present. The ttl= method now sets the s-maxage value instead
 of max-age.  Code that used ttl= to control freshness at the
 client needs to change to set the max-age directive explicitly.

* Enable support for X-Sendfile middleware by responding to
 #to_path on bodies served from disk storage. Adding the
 Rack::Sendfile component upstream from Rack::Cache will result in
 cached bodies being served directly by the web server (instead of
 being read in Ruby).

* BUG: MetaStore hits but EntityStore misses. This would 500
 previously; now we detect it and act as if the MetaStore missed
 as well.

* Implement low level #purge method on all concrete entity store
 classes -- removes the entity body corresponding to the SHA1 key
 provided and returns nil.

* Basically sane handling of HEAD requests. A HEAD request is
 never passed through to the backend except when transitioning
 with pass!. This means that the cache responds to HEAD requests
 without invoking the backend at all when the cached entry is
 fresh. When no cache entry exists, or the cached entry is stale
 and can be validated, the backend is invoked with a GET request
 and the HEAD is handled right before the response is delivered

* BUG: The Age response header was not being set properly when a
 stale entry was validated. This would result in Age values that
 exceeded the freshness lifetime in responses.

* BUG: A cached entry in a heap meta store could be
 unintentionally modified by request processing since the cached
 objects were being returned directly. The result was typically
 missing/incorrect header values (e.g., missing Content-Type
 header). [dkubb]

* BUG: 304 responses should not include entity headers
 (especially Content-Length). This is causing Safari/WebKit
 weirdness on 304 responses.

* BUG: The If-None-Match header was being ignored, causing the
 cache to send 200 responses to matching conditional GET requests.

This topic is locked and can not be replied to.