当前位置: 首页 > 知识库问答 >
问题:

没有Cache-Control或Expires标头的CDN强缓存问题

康泽宇
2023-03-14

我们正在使用Azure CDN来提供图像,我正在尝试了解为什么图像会被Web浏览器强缓存,即使图像响应中没有Cache-Control或Expires标头。

例如,对于来自Azure CDN的图像,返回以下响应头:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Content-MD5: KuQCJm6GQyEjejWwmRgRwQ==
Content-Type: image/jpeg
Date: Tue, 21 Nov 2017 00:15:57 GMT
Etag: 0x8D523228F0F4C42
Last-Modified: Sat, 04 Nov 2017 01:22:47 GMT
Server: ECAcc (meb/A744)
X-Cache: HIT
x-ms-blob-type: BlockBlob
x-ms-lease-status: unlocked
x-ms-request-id: 00822b7c-001e-0045-4194-61d246000000
x-ms-version: 2009-09-19
Content-Length: 5143

<<image data>>

如您所见,返回了一个Etag标头,但没有Cache-Control或Expires标头。

当从浏览器(Chrome)跟踪流量(使用Fiddler)时,我们看不到对这些图像的任何后续请求。

我对Etags的理解是,这个图像的后续请求应该发回服务器(弱缓存),然后如果文件没有改变,服务器可以返回304未修改的响应。

有人能解释一下吗?

共有1个答案

闾丘山
2023-03-14

我想你需要头cache-control: must-revalidate来让浏览器检查源代码,如果没有变化就返回304 mot modified。

不过,就缓存而言,这不是最佳的。

您最好使用QS更改使js无效(“v=??”)或设置一个简短的过期/max-age标头(60/120秒,或者您可以在部署方面处理的任何内容,5分钟???)。

将过期标头与etags结合在一起仍然意味着浏览器在过期后从服务器接收到未修改的304。

 类似资料:
  • 响应头如下,为什么浏览器命中强缓存?

  • 最初我使用的是“缓存静态内容”的云CDN配置。但将其升级为“基于缓存控制标头使用原始设置”当前缓存设置: 我仍然看到图像,特别是webp没有被CDN缓存。我还更新了。htaccess文件,以增加WebP的TTL。 Htaccess图像TTL 我“认为”这可能是由于nginx和什么是“静态”图像。 如何在云CDN中正确缓存这些图像? 更新: 缓存似乎存在,它只是太短了,我似乎无法扩展它。CDN说它只

  • 我正在努力学习一些关于HTTP的基础知识。我检查了一些HTTP响应头,注意到了两件让我困惑的事情: > 没有缓存控制标头,并且 ETag标头存在。 我理解 ETag 的方式是,客户端将 ETag 中的请求发送到缓存,并且缓存将资源 Etag 与服务器重新验证。但是,如果没有缓存控制标头作为响应,则所有后续请求都直接与服务器进行重新验证并完全省略缓存。是这种情况还是我错过了什么?当响应中不存在缓存控

  • Spring MVC提供了许多方式来配置"Cache-Control"请求头,支持在许多场景下使用它。关于该请求头完整详尽的所有用法,你可以参考RFC 7234的第5.2.2小节,这里我们只讲解最常用的几种用法。 Spring MVC的许多API中都使用了这样的惯例配置:setCachePeriod(int seconds),若返回值为: -1,则框架不会生成一个'Cache-Control'缓存

  • 关于资源缓存响应头的cache-control字段和indexDB方案有什么区别 比如一个资源,不会频繁改变,我第一次请求到资源后放到indexDB中和直接在响应头设置cache-control为public和过期时间本质上有什么区别呢?