在Azure blockBlob上设置CacheControl,如何在部署新文件时使其无效

本文关键字:文件 无效 新文件 部署 blockBlob Azure 设置 CacheControl | 更新日期: 2023-09-27 18:12:41

我想缓存一些我们在azure上的静态blobs:

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("staticJsonFile");
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobref);
// Cache setup
int expirationSeconds = new DateTime(2050, 1, 1).Subtract(DateTime.Now).Seconds;
string cacheControl = string.Format("public, max-age={0}, s-maxage={0}", expirationSeconds);
blockBlob.Properties.CacheControl = cacheControl;
blockBlob.SetProperties();

它们被"永远"缓存。

当具有相同名称的新文件(相同的文件,但新的内容)上传到Azure文件存储时,我能以某种方式说blockBlob的缓存无效吗?

在Azure blockBlob上设置CacheControl,如何在部署新文件时使其无效

因为您也设置了客户端缓存控制头(public, max-age=),即使您使服务器blob缓存无效,客户端也不会检查新文件。他们只会使用缓存版本。

你应该考虑给你的文件添加一个版本号,并相应地更新你的源引用。

另一种方法是强制客户端发出if-modified-since请求(这需要您将must-revalidate添加到缓存控制头中),因此您可以更好地控制客户端何时获得新文件。但是你不能在当前的情况下使用它,因为你不能对所有已经缓存了你的文件的浏览器/应用程序做任何事情。

强制缓存重新验证还会导致额外的往返(在未修改时导致http-302),并且在网络延迟高时可能会出现性能问题。