HTTP响应中没有Cache-Control头的ETag

7

我正在尝试学习HTTP的一些基础知识。我检查了一些HTTP响应头,注意到了两件令我困惑的事情:

  • 没有cache-control头部和

  • ETag头部存在。

我理解的ETag的方式是,客户端将ETag发送到缓存中,缓存使用Etag与服务器重新验证资源。但如果响应中没有Cache-Control头,则所有后续请求直接与服务器进行重新验证并完全忽略缓存,这是真的吗?还是我遗漏了什么?当响应中没有Cache-Control头时是否会发生其他事情?如果所有请求最终都将直接发送到服务器,为什么会出现ETag?

1个回答

8
缺少缓存控制头并不意味着资源不能被缓存 - 客户端(即Web浏览器)决定如何处理此未定义状态。
在内存或磁盘中缓存它,仅在ETag验证时使用该缓存版本似乎是一个完全合理的实现。
如果您不希望资源被缓存,则应使用“max-age = 0,no-store,no-cache,must-revalidate”缓存控制头明确表示。

所有这些值都是必需的吗?看起来这个头文件非常冗长,而没有缓存什么。我认为需要确保某个文件永远不被缓存的常见情况是许多单页面应用程序的service-worker.js文件。 - Andrew Craswell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接