4

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

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

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

(如果有人想自己检查,我点击的 URL 在这里这里。我不介意进行健全性检查,看看是否只是我的浏览器感到困惑。)

4

2 回答 2

5

关于 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 为有效

于 2013-10-09T15:42:20.913 回答
2

刚刚使用 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]+$");
于 2010-01-22T11:30:34.120 回答