-1

“优化缓存 - 让 Web 更快 - Google Developers”文档中,Google 指出

为所有可缓存资源指定ExpiresCache-Control max-age之一,以及Last-ModifiedETag之一是很重要的。同时指定 Expires 和 Cache-Control: max-age 或同时指定 Last-Modified 和 ETag 是多余的。

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

生成的图像与 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 存储仅使用两个指令之一来消除这种冗余?

4

2 回答 2

0

就我个人而言,我不会太担心这两个标签被发回,因为这实际上是RFC 2616推荐的。

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

HTTP 1.1 客户端必须在任何缓存条件请求中使用实体标签,如果实体标签Last-Modified都存在,它应该同时使用这两者。

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

于 2013-03-14T20:44:03.887 回答
0

简短的回答是你不能。

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

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

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

于 2013-03-15T04:58:36.460 回答