0

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

我错过了什么?

4

2 回答 2

1

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

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

并在散列周围发送带有“”的If-None-Match,我认为这看起来很脆弱

于 2013-10-02T09:06:02.073 回答
1

可能是由于max-age指令设置为 10

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

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

于 2013-10-02T07:13:07.160 回答