Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 如何强制Windows Azure存储提供的可缓存资源的特定HTTP头?_Caching_Azure_Http Headers_Azure Storage_Azure Storage Blobs - Fatal编程技术网

Caching 如何强制Windows Azure存储提供的可缓存资源的特定HTTP头?

Caching 如何强制Windows Azure存储提供的可缓存资源的特定HTTP头?,caching,azure,http-headers,azure-storage,azure-storage-blobs,Caching,Azure,Http Headers,Azure Storage,Azure Storage Blobs,在这份文件中,谷歌表示 必须指定过期或缓存控制中的一个 所有可缓存数据的最大年龄,以及上次修改的或ETag中的一个 资源。指定过期和缓存控制是多余的: 最大年龄,或指定上次修改和ETag 我正在使用Microsoft.WindowsAzure.StorageClient中的类将图像上载到blob容器,实际上,这与开源项目中的代码相同 最后修改的图像和ETag一起提供: ETag: 0x8CFED5D3384112F Last-Modified: Tue, 12 Mar 2013 17:21:43

在这份文件中,谷歌表示

必须指定过期缓存控制中的一个 所有可缓存数据的最大年龄,以及上次修改的ETag中的一个 资源。指定过期和缓存控制是多余的: 最大年龄,或指定上次修改和ETag

我正在使用Microsoft.WindowsAzure.StorageClient中的类将图像上载到blob容器,实际上,这与开源项目中的代码相同

最后修改的图像和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 Storage仅使用这两个指令中的一个来消除这种冗余?

就个人而言,我不会太担心两个标记都被发送回去,因为这实际上是Microsoft推荐的

13.3.4何时使用实体标签和上次修改日期的规则

HTTP/1.1源服务器:

... HTTP/1.1源服务器的首选行为是发送强实体标记和上次修改的值。

HTTP 1.1客户端必须在任何缓存条件请求中使用实体标记,如果同时存在实体标记和上次修改的,则应同时使用这两种标记


我希望这能澄清为什么这两个标签都是从Azure存储服务器发回的。

简单的回答是你不能

在考虑这一点时,重要的是要记住,当您访问blob存储时,您并没有访问web服务器上的文件,而是使用了一个rest API来返回文件

微软没有办法删除他们认为对存储API至关重要的头文件


如果您担心过多的标题,响应还包括几个x-ms-。。。用于非浏览器的API客户端的标题。

谢谢,非常好的捕获,现在我可以继续使用而不必担心了!但从“让Web更快”的角度分析,我仍然倾向于同意谷歌关于冗余的观点,并且仍然希望找到一个解决方案。Azure存储确实默认发送几个x-ms头,浏览器将忽略这些头。但是“Microsoft无法配置从任何存储调用返回的头”这不是很正确,因为使用Azure SDK我可以控制缓存头(我的问题的范围)、ContentEncoding、ContentMD5、ContentLanguage和其他一些我可以控制值的值,如ContentType。不管怎样,根据你的回答,我不想说了。