如何强制Windows Azure存储服务的可缓存资源的特定HTTP标头?

时间:2013-03-14 19:58:15

标签: caching azure http-headers azure-storage azure-storage-blobs

在文档"Optimize Cache - Make the Web Faster - Google Developers"中,Google声明了

  

指定 Expires Cache-Control中的一个非常重要   所有可缓存的最大年龄,以及上次修改 ETag 之一   资源。指定Expires和Cache-Control是多余的:   max-age,或指定Last-Modified和ETag。

我正在使用Microsoft.WindowsAzure.StorageClient中的类将图像上传到blob容器,实际上与开源项目Azure Storage Explorer中可以看到的代码相同。

生成的图像与BOTH Last-Modified和ETag:

一起提供
ETag: 0x8CFED5D3384112F
Last-Modified: Tue, 12 Mar 2013 17:21:43 GMT

所以下一个浏览器请求发送HTTP标头:

If-Modified-Since: Tue, 12 Mar 2013 17:21:43 GMT
If-None-Match: 0x8CFED5D3384112F

如何强制Azure存储仅使用两个指令中的一个来消除此减少?

2 个答案:

答案 0 :(得分:0)

我个人不会担心这两个标签被发送回来,因为这是RFC 2616实际推荐的。

  

13.3.4何时使用实体标签和最后修改日期的规则
  ...
  HTTP / 1.1源服务器:
  ...
  ... HTTP / 1.1源服务器的首选行为是发送强实体标记和 Last-Modified 值。 < / p>

HTTP 1.1客户端必须在任何缓存条件请求中使用实体标记,如果实体标记最后修改存在,应该使用两者。

我希望这将澄清为什么两个标记都从Azure存储服务器发回。

答案 1 :(得分:0)

简短的回答是你不能。

在考虑这一点时,重要的是要记住,当您访问blob存储而不访问Web服务器上的文件时,您正在使用碰巧返回文件的其他API。

Microsoft无法删除他们认为对存储API至关重要的标头。

如果您担心标题过多,则响应中还包含几个x-ms -...标头,这些标头适用于非浏览器的API客户端。