【问题标题】:YSlow giving inconsistent results on ETagsYSlow 在 ETags 上给出不一致的结果
【发布时间】:2011-01-07 14:44:19
【问题描述】:

当我对我的网站运行 YSlow 时,我在“配置 ETags”项上得到一个“F”;它声称我的许多(全部?)图像、样式表等都没有 etag。

但是,如果我直接在其中一张图片上运行测试,我会在 etag 测试中获得 A。此外,在 Firebug Net 面板的响应标头上,我可以在该项目上看到整页和直接 URL 版本的 etag。

我可能会做些什么来导致这种奇怪的行为吗?

(如果有人想自己检查,我访问的 URL 是 herehere。我不介意进行健全性检查,看看是否只是我的浏览器有问题。)

【问题讨论】:

    标签: yslow etag


    【解决方案1】:

    刚刚在本地使用 FF 3.6 和 YSlow 2.0.3(新发布的版本)进行了尝试,独立图像给出了“B”的分数,引用了错误配置的 ETag。

    ETag 显示在标题中,在 FireBug 网络面板和 YSlow 组件面板中显示。

    但是,这是设计使然。如果您查看http://developer.yahoo.com/performance/rules.html#etags,您会发现 IIS 和 Apache 生成的默认 ETag 不是最优的。

    作为参考,YSlow 中的实际 lint 规则检查以下两个正则表达式:

      apache_re = new RegExp("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$");
      iis_re = new RegExp("^[0-9a-z]+:[0-9a-z]+$");
    

    【讨论】:

    • “B”分数更奇怪。我会尝试升级,看看我得到了什么。谢谢!
    • 我认为 YSlow 的问题是,虽然 ETag 存在,但 IIS 生成它们的方式使它们变得非常无效并且经常更改。这意味着用户将比他们应该更频繁地获得 200 个响应代码。 (YSlow 链接比我解释得更好!)
    【解决方案2】:

    关于 IIS 7,我的回答是忽略 YSlow 的建议。

    IIS 7 在生成 ETag 时使用零元数据库更改编号。那是冒号后面的部分...所以 etag 将始终类似于“5321116d3585ce1:0”,其中第一部分是根据上次修改的文件时间生成的,然后是冒号和元数据库更改编号。

    从 IIS 7 开始,Microsoft 一直将该更改编号设置为零,因此即使跨多个 Web 服务器也将相同。对于 IIS 5 和 6,如果您想获得相同的最终结果,可以将其设置为零:

    http://technet.microsoft.com/en-us/library/ee619764(WS.10).aspx

    如果 YSlow 仍在使用 iis_re = new RegExp("^[0-9a-z]+:[0-9a-z]+$"); 的正则表达式规则,那么他们'错误,如果它以 :0

    结尾,则应重写以接受 etag 为有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2013-03-12
      • 1970-01-01
      相关资源
      最近更新 更多