没有 Cache-Control 或过期 headers 的 CDN 强缓存问题

Issue with CDN strong caching without Cache-Control or Expires headers

我们正在使用 Azure CDN 提供图像,我试图理解为什么网络浏览器 strong-cached 即使没有 Cache-Control 或过期 header在图像响应中。

例如,以下响应 headers returned 用于来自 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 header returned,但没有 Cache-ControlExpires headers.

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

我对Etags的理解是,后续对这张图片的请求应该发回服务器(弱缓存),然后服务器可以return一个304不修改 如果文件未更改则响应。

任何人都可以阐明这一点吗?

我认为您需要 header cache-control: must-revalidate 让浏览器检查源代码,如果没有更改则返回 304 mot 修改。

虽然这在缓存方面不是最佳的。

你最好用QS改变使js失效("v=??")或者设置一个短的过期时间/max-age header(60 / 120秒,或者任何你能处理的部署条款,5 分钟???)。

将过期 header 与 etags 结合使用仍然意味着浏览器在过期后收到未从服务器修改的 304。