我使用Rack:Etag根据来自服务器的响应生成适当的etag值,对于开发,我使用Rack::Cache来验证我期望发生的缓存是否真的存在
但我有一个小小的困境:
我发送了一个请求并得到这些头文件
Age →0
Cache-Control →public, max-age=10
Connection →keep-alive
Content-Length →4895
Content-Type →application/json; charset=UTF-8
Date →Wed, 02 Oct 2013 06:55:42 GMT
ETag →"dd65de99f4ce58f9de42992c4e263e80"
Server →thin 1.5.1 codename Straight Razor
X-Content-Digest →0879e41b0d8e9b351f517dd46823095e0e99abd8
X-Rack-Cache →stale, invalid, store如果我在11秒后用If-None-Match=dd65de99f4ce58f9de42992c4e263e80发送了一个新的请求,那么我希望得到一个304,但使用上面的头部总是得到200。
我错过了什么?
发布于 2013-10-02 15:13:07
会不会是因为max-age指令设置为10
当缓存响应中存在max-age缓存控制指令时,如果响应的当前寿命大于在对该资源发出新请求时提供的老化时间值(以秒为单位),则该响应是陈旧的。
不过,你已经知道了吗?就像你在11秒后尝试的那样!
发布于 2013-10-02 17:06:02
我认为解决方案是加载机架中间件,如下所示用于coorect链接
use Rack::Cache
use Rack::ConditionalGet
use Rack::ETag还会发送If-None-Match with "“around hash,我认为这看起来非常脆弱
https://stackoverflow.com/questions/19131503
复制相似问题