rtomayko / rack-cache

Real HTTP Caching for Ruby Web Apps

rack-cache / CHANGES
05d23360 » rtomayko 2009-06-05 Advanced memcached config, ... 1 ## 0.6.0 / Unreleased
2
3 * Added support for memcached clusters and other advanced
4 configuration provided by the memcache-client and memcached
5 libraries. The "metastore" and "entitystore" options can now be
6 set to a MemCache object or Memcached object:
7
8 memcache = MemCache.new(['127.1.1.1', '127.1.1.2'], :namespace => "/foo")
9 use Rack::Cache,
10 :metastore => memcache,
11 :entitystore => memcache
12
13 * Fix "memcached://" metastore URL handling. The "memcached" variation
14 blew up, the "memcache" version was fine.
15
c5308bef » rtomayko 2009-05-25 0.5 release 16 ## 0.5.0 / May 2009
dc350d87 » rtomayko 2009-03-31 Use memcache-client lib unl... 17
18 * Added meta and entity store implementations based on the
19 memcache-client library. These are the default unless the memcached
20 library has already been required.
21
d2681527 » rtomayko 2009-05-25 Disable client reload and r... 22 * The "allow_reload" and "allow_revalidate" options now default to
23 false instead of true. This means we break with RFC 2616 out of
24 the box but this is the expected configuration in a huge majority
25 of gateway cache scenarios. See the docs on configuration
26 options for more information on these options:
27 http://tomayko.com/src/rack-cache/configuration
28
f1b0fccb » rtomayko 2009-05-25 Note the addition of GAE me... 29 * Added Google AppEngine memcache entity store and metastore
30 implementations. To use GAE's memcache with rack-cache, set the
31 "metastore" and "entitystore" options as follows:
32
33 use Rack::Cache,
34 :metastore => 'gae://cache-meta',
35 :entitystore => 'gae://cache-body'
36
37 The 'cache-meta' and 'cache-body' parts are memcache namespace
38 prefixes and should be set to different values.
39
522dc31a » rtomayko 2009-03-16 0.4 release 40 ## 0.4.0 / March 2009
b9ad8736 » nakajima 2009-02-03 Added :cache_key option - c... 41
6f5b43df » rtomayko 2009-03-07 Ruby 1.9.1 / Rack 1.0 compa... 42 * Ruby 1.9.1 / Rack 1.0 compatible.
43
5a48ad55 » rtomayko 2009-03-05 Update CHANGES and TODO fil... 44 * Invalidate cache entries that match the request URL on non-GET/HEAD
45 requests. i.e., POST, PUT, DELETE cause matching cache entries to
e4a7b589 » Daniel Mendler 2009-03-06 Invalidate instead of purge... 46 be invalidated. The cache entry is validated with the backend using
47 a conditional GET the next time it's requested.
5a48ad55 » rtomayko 2009-03-05 Update CHANGES and TODO fil... 48
ce15dc7a » rtomayko 2009-02-08 Implement Cache-Control max... 49 * Implement "Cache-Control: max-age=N" request directive by forcing
50 validation when the max-age provided exceeds the age of the cache
129d9829 » rtomayko 2009-03-14 allow_revalidate option; se... 51 entry. This can be disabled by setting the "allow_revalidate" option to
52 false.
ce15dc7a » rtomayko 2009-02-08 Implement Cache-Control max... 53
0e53ba47 » rtomayko 2009-02-08 Implement no-cache request ... 54 * Properly implement "Cache-Control: no-cache" request directive by
55 performing a full reload. RFC 2616 states that when "no-cache" is
56 present in the request, the cache MUST NOT serve a stored response even
57 after successful validation. This is slightly different from the
58 "no-cache" directive in responses, which indicates that the cache must
59 first validate its entry with the origin. Previously, we implemented
60 "no-cache" on requests by passing so no new cache entry would be stored
61 based on the response. Now we treat it as a forced miss and enter the
481a0f01 » rtomayko 2009-03-14 allow_reload option; set fa... 62 response into the cache if it's cacheable. This can be disabled by
63 setting the "allow_reload" option to false.
0e53ba47 » rtomayko 2009-02-08 Implement no-cache request ... 64
ce623079 » rtomayko 2009-03-07 Conform to RFC 2616 regardi... 65 * Assume identical semantics for the "Pragma: no-cache" request header
66 as the "Cache-Control: no-cache" directive described above.
67
322d7222 » rtomayko 2009-02-08 Add X-Rack-Cache trace head... 68 * Less crazy logging. When the verbose option is set, a single log entry
69 is written with a comma separated list of trace events. For example, if
70 the cache was stale but validated, the following log entry would be
71 written: "cache: stale, valid, store". When the verbose option is false,
72 no logging occurs.
73
74 * Added "X-Rack-Cache" response header with the same comma separated trace
75 value as described above. This gives some visibility into how the cache
76 processed the request.
77
b9ad8736 » nakajima 2009-02-03 Added :cache_key option - c... 78 * Add support for canonicalized cache keys, as well as custom cache key
79 generators, which are specified in the options as :cache_key as either
80 any object that has a call() or as a block. Cache key generators get
81 passed a request object and return a cache key string.
82
d9ddbebf » rtomayko 2008-12-22 use s-maxage in preference ... 83 ## 0.3.0 / December 2008
01e96edd » rtomayko 2008-10-25 fix various issues with 304... 84
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 85 * Add support for public and private cache control directives. Responses
86 marked as explicitly public are cached even when the request includes
87 an Authorization or Cookie header. Responses marked as explicitly private
88 are considered uncacheable.
89
90 * Added a "private_headers" option that dictates which request headers
91 trigger default "private" cache control processing. By default, the
92 Cookie and Authorization headers are included. Headers may be added or
93 removed as necessary to change the default private logic.
94
e89cc299 » rtomayko 2008-12-22 respect must-revalidate cac... 95 * Adhere to must-revalidate/proxy-revalidate cache control directives by
96 not assigning the default_ttl to responses that don't include freshness
97 information. This should let us begin using default_ttl more liberally
98 since we can control it using the must-revalidate/proxy-revalidate directives.
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 99
d9ddbebf » rtomayko 2008-12-22 use s-maxage in preference ... 100 * Use the s-maxage Cache-Control value in preference to max-age when
101 present. The ttl= method now sets the s-maxage value instead of max-age.
102 Code that used ttl= to control freshness at the client needs to change
103 to set the max-age directive explicitly.
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 104
d9ddbebf » rtomayko 2008-12-22 use s-maxage in preference ... 105 * Enable support for X-Sendfile middleware by responding to #to_path on
1ae4fc5e » rtomayko 2008-11-30 disk entity store produces ... 106 bodies served from disk storage. Adding the Rack::Sendfile component
107 upstream from Rack::Cache will result in cached bodies being served
108 directly by the web server (instead of being read in Ruby).
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 109
a98e7c44 » rtomayko 2008-11-25 fix meta-store hit, entity-... 110 * BUG: MetaStore hits but EntityStore misses. This would 500 previously; now
111 we detect it and act as if the MetaStore missed as well.
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 112
abf4ffc4 » rtomayko 2008-11-25 implement #purge for all en... 113 * Implement low level #purge method on all concrete entity store
114 classes -- removes the entity body corresponding to the SHA1 key
115 provided and returns nil.
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 116
07398020 » rtomayko 2008-11-25 basically sane handling of ... 117 * Basically sane handling of HEAD requests. A HEAD request is never passed
118 through to the backend except when transitioning with pass!. This means
119 that the cache responds to HEAD requests without invoking the backend at
120 all when the cached entry is fresh. When no cache entry exists, or the
121 cached entry is stale and can be validated, the backend is invoked with
d9ddbebf » rtomayko 2008-12-22 use s-maxage in preference ... 122 a GET request and the HEAD is handled right before the response
07398020 » rtomayko 2008-11-25 basically sane handling of ... 123 is delivered upstream.
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 124
ac1c305c » rtomayko 2008-11-01 fix incorrect Age header va... 125 * BUG: The Age response header was not being set properly when a stale
126 entry was validated. This would result in Age values that exceeded
127 the freshness lifetime in responses.
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 128
6bcb5905 » rtomayko 2008-11-01 fix accidental header delet... 129 * BUG: A cached entry in a heap meta store could be unintentionally
130 modified by request processing since the cached objects were being
131 returned directly. The result was typically missing/incorrect header
132 values (e.g., missing Content-Type header). [dkubb]
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 133
01e96edd » rtomayko 2008-10-25 fix various issues with 304... 134 * BUG: 304 responses should not include entity headers (especially
135 Content-Length). This is causing Safari/WebKit weirdness on 304
136 responses.
dcc66ab5 » rtomayko 2008-12-28 proper support for private/... Comment 137
01e96edd » rtomayko 2008-10-25 fix various issues with 304... 138 * BUG: The If-None-Match header was being ignored, causing the cache
139 to send 200 responses to matching conditional GET requests.
140
3381abcd » rtomayko 2008-10-24 tidy things up a bit for re... Comment 141 ## 0.2.0 / 2008-10-24 / Initial Release
69c764ed » rtomayko 2008-08-03 auxiliary files 142
3381abcd » rtomayko 2008-10-24 tidy things up a bit for re... Comment 143 * Document events and transitions in `rack/cache/config/default.rb`
144 * Basic logging support (`trace`, `warn`, `info`, `error` from within Context)
145 * EntityStore: store entity bodies keyed by SHA
146 * MetaStore: store response headers keyed by URL
147 * Last-Modified/ETag validation
148 * Vary support
149 * Implement error! transition
150 * New Rack::Cache::Core
151 * memcached meta and entity store implementations
152 * URI based storage configuration
153 * Read options from Rack env if present (rack-cache.XXX keys)
154 * `object` is now `entry`
155 * Documentation framework and website
156 * Document storage areas and implementations
157 * Document configuration/events
158
159 ## 0.1.0 / 2008-07-21 / Proof of concept (unreleased)
69c764ed » rtomayko 2008-08-03 auxiliary files 160
3381abcd » rtomayko 2008-10-24 tidy things up a bit for re... Comment 161 * Basic core with event support
162 * `#import` method for bringing in config files
163 * Freshness based expiration
164 * RFC 2616 If-Modified-Since based validation
165 * A horribly shitty storage back-end (Hash in mem)
166 * Don't cache hop-by-hop headers: Connection, Keep-Alive, Proxy-Authenticate,
167 Proxy-Authorization, TE, Trailers, Transfer-Encoding, Upgrade