http 响应中没有 Cache-Control header 的 ETag
ETag with no Cache-Control header in http response
我正在尝试学习有关 HTTP 的一些基础知识。我检查了一些 HTTP 响应 headers 并注意到有两件事让我感到困惑:
没有cache-controlheader和
存在 ETag header。
我对 ETag 的理解是,客户端在请求中向缓存发送 ETag,然后缓存与服务器重新验证资源 Etag。但是如果没有 Cache-Control header 响应,那么所有后续请求都会直接与服务器重新验证并完全省略缓存。是这种情况还是我遗漏了什么?当响应中没有 cache-control header 时,还会发生其他事情吗?如果所有请求都将直接发送到服务器,为什么 ETag 仍然存在?
缺少 cache-control header 并不意味着无法缓存资源 - 由客户端(即网络浏览器)决定如何处理此未定义状态。
缓存它(无论是在内存中还是在磁盘中)并且仅在 ETag 验证时才使用该缓存版本对我来说似乎是一个完全合理的实现。
如果您不想缓存资源,那么您应该使用 "max-age=0, no-store, no-cache, must-revalidate" 的 cache-control header 明确说明。
我正在尝试学习有关 HTTP 的一些基础知识。我检查了一些 HTTP 响应 headers 并注意到有两件事让我感到困惑:
没有cache-controlheader和
存在 ETag header。
我对 ETag 的理解是,客户端在请求中向缓存发送 ETag,然后缓存与服务器重新验证资源 Etag。但是如果没有 Cache-Control header 响应,那么所有后续请求都会直接与服务器重新验证并完全省略缓存。是这种情况还是我遗漏了什么?当响应中没有 cache-control header 时,还会发生其他事情吗?如果所有请求都将直接发送到服务器,为什么 ETag 仍然存在?
缺少 cache-control header 并不意味着无法缓存资源 - 由客户端(即网络浏览器)决定如何处理此未定义状态。
缓存它(无论是在内存中还是在磁盘中)并且仅在 ETag 验证时才使用该缓存版本对我来说似乎是一个完全合理的实现。
如果您不想缓存资源,那么您应该使用 "max-age=0, no-store, no-cache, must-revalidate" 的 cache-control header 明确说明。