我有一个带有测试PDF的网址,这是我的起源:https://powered-by.qbank.se/miso/MISO_Testing_Document279626.pdf
我使用Microsoft提供程序在Azure CDN中设置了原始设置。这是网址……
为了更好地理解这种现象,从obesrve直接访问URL收到的响应头是一个良好的开端。 一种方法是使用 curl -I <YOUR_URL> 在你的终端。
curl -I <YOUR_URL>
你会看到类似的东西:
HTTP/1.1 200 OK Date: Mon, 01 Oct 2018 09:03:57 GMT Server: Apache Last-Modified: Fri, 28 Sep 2018 19:11:57 GMT ETag: "11ff1-576f33ab4c2a0" Accept-Ranges: bytes Content-Length: 73713 Cache-Control: max-age=86400 Expires: Tue, 02 Oct 2018 09:03:57 GMT Content-Type: application/pdf
在这些标题中,浏览器使用了 Cache-Control , ETag 和 Last-Modified 确定所请求内容的新鲜度。 Cache-Control: max-age=<seconds> 是资源被视为新鲜的最长时间(相对于请求的时间)。
Cache-Control
ETag
Last-Modified
Cache-Control: max-age=<seconds>
现在,根据Mozilla开发者网络 CMDN C 新鲜 描述如下:
一旦资源存储在缓存中,理论上它可以永远地由缓存服务。缓存具有有限的存储空间,因此会定期从存储中删除项目。这个过程被称为 缓存驱逐 。另一方面,服务器上的某些资源可能会发生变化,因此应更新缓存。由于HTTP是客户端 - 服务器协议, 的 当资源发生变化时,服务器无法联系缓存和客户端;他们必须传达资源的到期时间 强> 。在此到期时间之前,资源是 新鲜 ;在到期时间之后,资源是陈旧的。驱逐算法通常会将新资源限制在陈旧资源之上。请注意,不会驱逐或忽略陈旧资源;当缓存收到过时资源的请求时,它会使用a转发此请求 如果 - 无 - 匹配 检查它是否实际上仍然是新鲜的。如果是,则服务器返回a 304 (未修改)标头没有发送所请求资源的主体,节省了一些带宽。
因此,要验证缓存资源,请执行 If-None-Match 如果是,浏览器将发出标题 ETag header是资源响应的一部分。
If-None-Match
这是一种机制,可以让您的浏览器在直接访问时下载新版本的pdf。另请注意,这些标头也存在于来自CDN网址的请求中,但CDN边缘服务器仍然存储您的旧文件。
说到CDN缓存, ETag 和 Last-Modified 标题不受尊重。它只是 Cache-Control 来自源服务器的HTTP响应中的标头,用于定义资源的生存时间(TTL)周期。在你的情况下,它是86400秒。因此,从理论上讲,您的pdf的新版本将在第一次请求后1天通过CDN链接提供。 直到那一刻,旧的pdf将由CDN边缘服务器托管。你可以阅读更多关于 Azure CDN到期管理 在Azure CDN文档中。