ETag标头(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag)的定义:
ETag HTTP响应标头是特定版本的标识符 资源。它使缓存更加有效,并节省了 带宽,因为如果以下情况,Web服务器不需要发送完整的响应 内容没有改变。另一方面,如果内容包含 更改后,etags有助于防止同时更新 彼此覆盖(“空中碰撞”)获得资源。
缓存控制标头(https://developer.mozilla.org/de/docs/Web/HTTP/Headers/Cache-Control)的定义:
“ Cache-Control”通用头字段用于指定指令 用于请求和响应中的缓存机制。
因此,ETag标头告知浏览器资源,以向服务器发送单个HTTP请求并询问文件哈希是否已更改。如果是,请下载一个新的。大。因此,如果设置了ETag标头,为什么我还需要缓存控制(在Expires标头旁边,这可能有助于避免此单个请求)?
因此,如果我仍然必须设置Cache-Control标头,那只会是有害的吧?我认为最合适的值是:
Cache-Control: must-revalidate
但是我不确定这是否会触发不必要的其他操作。
答案 0 :(得分:1)
经过研究,我发现了Alex Barashkov撰写的有关 Medium 的出色教程:"Best practices for cache control settings for your website"。
亚历克斯写道:
我建议您将
Cache-Control: no-cache
应用于html文件。正在申请 “无缓存”并不意味着根本没有缓存,只是 告诉浏览器在使用之前验证服务器上的资源 从缓存中。这就是我们需要将其与Etag一起使用的原因,因此浏览器 将发送一个简单的请求并加载额外的80个字节以验证 文件状态。
答案 1 :(得分:0)
ETag
标头的存在并不指示浏览器执行任何操作。浏览器根据在请求和缓存的响应中收到的Cache-Control
标头来决定要做什么。如果它确定资源已过时或需要重新验证,则可以使用ETag
值向服务器创建条件请求,并获取新资源(状态码200),或发出通知一切都没有改变(状态代码304)
两个标题都是您的缓存最佳工作所必需的。