【问题标题】:Trouble Minimizing 304 Requests最小化 304 请求的麻烦
【发布时间】:2012-01-27 16:16:33
【问题描述】:

现在我正在尝试尽量减少对我网站的 304 请求。我已经实施了这里要求的建议:

Asking browsers to cache as aggressively as possible

但是,无论我做什么,有些图像都拒绝从缓存中拉出,即使它们与被拉出的其他图像相似。现在我们正在使用 IIS 7.5 和 chrome 来查看网络流量。

下面是图片的初始响应示例,btn-blue.png,将从缓存中提取:

Accept-Ranges:bytes
Content-Length:49585
Content-Type:image/png
Date:Fri, 27 Jan 2012 16:02:26 GMT
ETag:"26cb96cdccc1:0"
Expires:Sat, 31 Dec 2012 00:00:00 GMT
Last-Modified:Thu, 26 Jan 2012 20:49:46 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET

以下是图像响应标头 topnav-blue-poweredbyipipeline.png 的示例,它永远不会从缓存中拉取:

Accept-Ranges:bytes
Content-Length:2680
Content-Type:image/png
Date:Fri, 27 Jan 2012 16:02:17 GMT
ETag:"b85767a6cdccc1:0"
Expires:Sat, 31 Dec 2012 00:00:00 GMT
Last-Modified:Thu, 26 Jan 2012 20:49:47 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET

知道为什么一个会拉而另一个不会吗?

【问题讨论】:

  • 您的意思是“最大化”304 响应吗?您需要考虑将与缓存相关的标头添加到响应中(其中有几个,不同浏览器的处理方式不同),然后 ETag 和 Expires 也是相关的。
  • 实际上我正在寻找它,以便浏览器根本不需要调用服务器。只需将其从缓存中拉出即可。现在它正在收到一条 304 消息,但我希望它不必首先拨打该电话。
  • 浏览器必须至少下载一次位于任何特定 url 的内容。由服务器“要求”浏览器缓存它(同时还指定“如何”和“多长时间”),并由浏览器来尊重这一点。服务器通过响应头提供这些指令(一个单独的研究;我只是给你指点),我很确定所有流行的浏览器都会遵守这些指令而不会对你撒谎。
  • 你能准确定义“从缓存中拉取”和“不从缓存中拉取”的含义吗?
  • 当然!在 chrome 中查看开发人员工具中的网络选项卡时,一些图像会在大小列下显示“(来自缓存)”,而其他图像会显示“250B”或类似的内容。同样在“状态”列下,如果它询问服务器,它会说“304”,如果没有,它会说“200”。所以我假设标记为“(来自缓存”)的那些来自缓存,而“304”是从缓存中使用的,但最初并未从中提取。

标签: asp.net iis-7.5


【解决方案1】:

所以我们弄清楚了为什么会发生这种情况。事实证明,如果您使用 Enter 按钮导航到网页,Chrome 将积极使用其缓存。如果您使用刷新按钮,Chrome 将调用几乎所有元素。

【讨论】:

    【解决方案2】:

    您链接的其他帖子中的所有内容都有一个 Cache-Control: max-age= 标头。你试过吗?我不认为 expires 和 etag 就足够了,我认为你也需要 Cache-Control,但我还没有实际测试过。

    【讨论】:

    • 实际上是的,我也尝试过使用 Cache-Control,但我得到了相同的结果。我不认为我可以让 IIS 两者都使用,但如果你知道我愿意尝试的方法!
    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多