【问题标题】:Rack::Cache/Rack::Etag 304机架::缓存/机架::Etag 304
【发布时间】:2013-10-02 06:58:37
【问题描述】:

我使用 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 和上述标头。

我错过了什么?

【问题讨论】:

    标签: ruby http caching rack


    【解决方案1】:

    可能是因为 max-age 指令被设置为 10

    当缓存响应中存在 max-age cache-control 指令时,如果响应的当前年龄大于对该资源的新请求时给定的年龄值(以秒为单位),则该响应是陈旧的。

    虽然,你已经知道了吗?正如你在 11 秒后尝试的那样!

    【讨论】:

    • 我已经知道了,但我想如果缓存过时并发出新请求,它会比较 etag 并在 etag 生成匹配 If-None-Match 时给出 304。但是在这里我的知识非常有限:-)
    【解决方案2】:

    我认为解决方案是按如下方式加载机架中间件以进行协同链接

    use Rack::Cache
    use Rack::ConditionalGet
    use Rack::ETag
    

    并且还发送 If-None-Match 与 "" 围绕哈希,我认为这似乎很脆弱

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2012-05-30
      • 1970-01-01
      • 2012-05-18
      • 2016-07-04
      • 2015-12-24
      • 1970-01-01
      • 2014-03-13
      • 2014-01-26
      相关资源
      最近更新 更多