2017-01-02 28 views
0

我在响应中发送以下标题。 "Cache-Control: public, max-age=300",但仍然每次刷新时我都会收到一个200响应(请求再次向服务器发出)。如果我添加“Expires”标题,也会发生同样的情况。但是,如果我将ETag添加到标题中,那么我会刷新304(请求发送到服务器,服务器准备好响应,然后匹配ETag并返回204响应)。缓存控制无法工作没有etag

我应该怎么改变,使"Cache-Control"头的使用量和 内容是从本地缓存中,直至岁成为超过"max-age"没有请求被发送到服务器?

编辑:这是一个不获取缓存https://image-dev-dot-quizizz-dev.appspot.com/resource/gs/quizizz-image/rejected.jpeg

+0

你确定'max-age = 300'吗?它设置为300秒。 – Prajwal

回答

1

您的图片是在代理缓存图像 - 注意到在响应你Age头。而且,300秒内的每一个下一个请求都会花费更少的时间。为什么地位不是304?据this article

200(从高速缓存)VS 304

不多久执行站点绩效审计,我注意到 ,很多我们的资产被返回304个状态。在比较 另一个网站时,我注意到它正在返回一个200(来自缓存)状态 的代码。这引起了我的兴趣,我想深入挖掘。

事实证明,当200(来自缓存)响应被给出时,意味着 内容的未来到期日期被设置。 实质上, 浏览器甚至不真正与服务器通信以检查 该文件。它知道不要这样做,直到过期日期已过期 。

相比之下,304发送到服务器并且接收到回应数据没有改变的回应 。 服务器正在告诉浏览器使用 缓存作为结果。

+0

如果是这样,那么为什么添加'Etag'开始给'304'。它应该仍然给'200(从缓存)'300秒,然后应该给'304'? –

+0

看来,如果您添加Etag,浏览器始终会检查它。 –