没有etag,缓存控制无法正常工作

时间:2017-01-02 10:12:29

标签: http http-headers cache-control

我在响应中发送以下标题。 "Cache-Control: public, max-age=300",但每次点击刷新时我都会得到一个200响应(再次向服务器发出请求)。如果我添加“Expires”标题,也会发生同样的情况。

但是如果我在标题中添加一个ETag,那么我在刷新时得到304(请求进入服务器,服务器准备响应,然后匹配ETag并返回204响应)。

我应该更改哪些内容以便使用"Cache-Control"标头 内容是从本地缓存提供的,在年龄超过"max-age"之前,没有请求发送到服务器?

编辑:这是一张未缓存的图片https://image-dev-dot-quizizz-dev.appspot.com/resource/gs/quizizz-image/rejected.jpeg

1 个答案:

答案 0 :(得分:1)

您的图片 在代理缓存中 - 请注意,在回复中,您获得了Age标头。此外,300秒内的每个下一个请求都需要更少的时间。为什么状态不是304?根据{{​​3}}:

  

200(来自缓存)vs 304

     

现在有一天我在进行网站性能审核时注意到了   我们的很多资产都返回了304状态。比较时   另一个网站,我注意到它返回200(从缓存)状态   码。这引起了我的兴趣,我想深入挖掘。

     

事实证明,当给出200(来自缓存)响应时,它意味着   设置了内容的未来到期日期。 本质上是   浏览器甚至没有真正与服务器通信来检查   文件。它知道在失效日期之前不要这样做   过期。

     

相比之下,304进入服务器并收到响应   数据没有变化。 服务器告诉浏览器使用   结果缓存。