Azure Blob SAS 和 Cache-Control 确保资源得到缓存

JCS*_*JCS 4 html caching azure azure-blob-storage

我们提供存储在 Azure Blob 容器上的私有资源(图像、文件等)。

安全性是使用为每个资源请求创建的共享访问签名来实现的,例如,两个请求意味着两个不同的访问令牌。

一般来说,安全 URL 由文件名和作为查询字符串传递的令牌组成,例如https://myaccount.blob.core.windows.net/file.img?sv=2015-04-05&ss=bf&srt=s&st =2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=F%6GRVAZ5Cdj2Pw4tgU7IlSTkWgn7bUkk Ag8P6HESXwmf%4B

资源的响应包含 Cache-Control 标头 (Cache-Control:max-age=31536000?

图像和视频类型的资源使用常规 HTML 或元素出现在网站中。

浏览器可以缓存以这种方式提供的资源吗?

感谢大家!

JCS*_*JCS 5

可以将缓存标头添加到共享访问签名中。

这指示 Azure Blob 返回相应的缓存标头作为 HTTP 响应的一部分。

在 C# 中可以这样做:

    var policy = new SharedAccessBlobPolicy();
    var headers = new SharedAccessBlobHeaders() { CacheControl = "max-age=" + MaxCacheAgeInDays * 24 * 60 * 60 };
    var blockBlob = _container.GetBlockBlobReference(name);

    var result = _baseUrl + blobName + blockBlob.GetSharedAccessSignature(policy, headers);
Run Code Online (Sandbox Code Playgroud)

希望这对其他人有帮助。

PS:对于其他HTTP标头也可以做同样的事情。

  • 仍然不清楚 - 如果我将缓存控制标头添加到 SAS Url - 浏览器是否能够缓存该文件,即使 SAS Url 每次都会不同? (3认同)