rtomayko / rack-cache
- Source
- Commits
- Network (11)
- Issues (4)
- Graphs
-
Tree:
e51b1fb
rack-cache / CHANGES
| 05d23360 » | rtomayko | 2009-06-05 | 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 | 16 | ## 0.5.0 / May 2009 | |
| dc350d87 » | rtomayko | 2009-03-31 | 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 | 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 | 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 | 40 | ## 0.4.0 / March 2009 | |
| b9ad8736 » | nakajima | 2009-02-03 | 41 | ||
| 6f5b43df » | rtomayko | 2009-03-07 | 42 | * Ruby 1.9.1 / Rack 1.0 compatible. | |
| 43 | |||||
| 5a48ad55 » | rtomayko | 2009-03-05 | 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 | 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 | 48 | ||
| ce15dc7a » | rtomayko | 2009-02-08 | 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 | 51 | entry. This can be disabled by setting the "allow_revalidate" option to | |
| 52 | false. | ||||
| ce15dc7a » | rtomayko | 2009-02-08 | 53 | ||
| 0e53ba47 » | rtomayko | 2009-02-08 | 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 | 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 | 64 | ||
| ce623079 » | rtomayko | 2009-03-07 | 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 | 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 | 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 | 83 | ## 0.3.0 / December 2008 | |
| 01e96edd » | rtomayko | 2008-10-25 | 84 | ||
| dcc66ab5 » | rtomayko | 2008-12-28 | 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 | 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 | 99 | ||
| d9ddbebf » | rtomayko | 2008-12-22 | 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 | 104 | ||
| d9ddbebf » | rtomayko | 2008-12-22 | 105 | * Enable support for X-Sendfile middleware by responding to #to_path on | |
| 1ae4fc5e » | rtomayko | 2008-11-30 | 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 | 109 | ||
| a98e7c44 » | rtomayko | 2008-11-25 | 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 | 112 | ||
| abf4ffc4 » | rtomayko | 2008-11-25 | 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 | 116 | ||
| 07398020 » | rtomayko | 2008-11-25 | 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 | 122 | a GET request and the HEAD is handled right before the response | |
| 07398020 » | rtomayko | 2008-11-25 | 123 | is delivered upstream. | |
| dcc66ab5 » | rtomayko | 2008-12-28 | 124 | ||
| ac1c305c » | rtomayko | 2008-11-01 | 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 | 128 | ||
| 6bcb5905 » | rtomayko | 2008-11-01 | 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 | 133 | ||
| 01e96edd » | rtomayko | 2008-10-25 | 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 | 137 | ||
| 01e96edd » | rtomayko | 2008-10-25 | 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 | 141 | ## 0.2.0 / 2008-10-24 / Initial Release | |
| 69c764ed » | rtomayko | 2008-08-03 | 142 | ||
| 3381abcd » | rtomayko | 2008-10-24 | 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 | 160 | ||
| 3381abcd » | rtomayko | 2008-10-24 | 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 | ||||

