http 响应中没有 Cache-Control 标头的 ETag

san*_*han 5 etag caching http http-headers

我正在尝试学习一些有关 HTTP 的基础知识。我检查了一些 HTTP 响应标头并注意到两件事让我感到困惑:

  • 没有缓存控制头和

  • 存在 ETag 标头。

我理解 ETag 的方式是,客户端在请求中将 ETag 发送到缓存,然后缓存与服务器重新验证资源 Etag。但是如果没有 Cache-Control 标头响应,那么所有后续请求都会直接与服务器进行重新验证并完全省略缓存。是这种情况还是我错过了什么?当响应中没有缓存控制标头时,还会发生其他事情吗?如果所有请求都将直接发送到服务器,为什么 ETag 甚至存在?

Bar*_*ard 7

没有缓存控制头并不意味着资源不能被缓存——由客户端(即网络浏览器)决定如何处理这个未定义的状态。

缓存它(无论是在内存中还是在磁盘中)并且仅在 ETag 验证时才使用该缓存版本对我来说似乎是一个完全合理的实现。

如果您不希望缓存资源,那么您应该使用“max-age=0, no-store, no-cache, must-revalidate”的缓存控制标头明确说明这一点。