在Azure blockBlob上设置CacheControl,部署新文件时如何失效?
Setting CacheControl on Azure blockBlob, how to invalidate when new files are deployed?
我想通过以下方式缓存我们在 Azure 上的一些静态 blob:
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();
它们被缓存 "forever"。
当同名新文件(相同文件但新内容)上传到 Azure filestorage 时,我能以某种方式说 blockBlob 的缓存无效吗?
因为您也在设置客户端缓存控制 headers (public, max-age=
),即使您使服务器 blob 缓存无效,客户端也不会检查新文件。他们只会使用缓存的版本。
您应该考虑为您的文件添加版本号,并相应地更新您的源引用。
另一种方法是强制客户端发出 if-modified-since
请求(这需要您将 must-revalidate
添加到您的缓存控制 header),这样您就可以更好地控制当客户端获取新文件时。但是你不能在你当前的情况下使用它,因为你不能对所有已经缓存你的文件的 browser/apps 做任何事情。
强制缓存重新验证也会导致额外的往返(在未修改时导致 http-302),并且如果网络延迟很高可能会出现性能问题。
我想通过以下方式缓存我们在 Azure 上的一些静态 blob:
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();
它们被缓存 "forever"。
当同名新文件(相同文件但新内容)上传到 Azure filestorage 时,我能以某种方式说 blockBlob 的缓存无效吗?
因为您也在设置客户端缓存控制 headers (public, max-age=
),即使您使服务器 blob 缓存无效,客户端也不会检查新文件。他们只会使用缓存的版本。
您应该考虑为您的文件添加版本号,并相应地更新您的源引用。
另一种方法是强制客户端发出 if-modified-since
请求(这需要您将 must-revalidate
添加到您的缓存控制 header),这样您就可以更好地控制当客户端获取新文件时。但是你不能在你当前的情况下使用它,因为你不能对所有已经缓存你的文件的 browser/apps 做任何事情。
强制缓存重新验证也会导致额外的往返(在未修改时导致 http-302),并且如果网络延迟很高可能会出现性能问题。