在IIS产品家族中,新的版本(例如IIS 7以后的版本)会自动配置一个ETag,这个ETag的值很类似于下面这样:
6ab823201a4ece1:0
它是由两个部分组成的
第一部分称为FileTimeStamp(时间戳),我们很容易联想到这可能是跟文档修改时间有关系,事实上确实是,但你无法将其直接还原为文档修改时间(微软并没有公开这部分的算法)。我确实对此做过一些研究,但最终还是没有办法解释这个值如何生成的,所以大家也只需要知道,这个是类似于一个时间戳的值就可以了。
第二部分为ChangeNumber(修改编号)。这个值在IIS 7.0以及后续的版本中,被统一设置为0。设置为一个统一值有利于解决一些问题(例如在服务器场模式下,该问题我后续也会讨论到)。事实上,保留这个ChangeNumber我觉得主要是历史遗留问题,因为早期版本是有这个值,而且可以不一样。既然如果这个值不一样的话,会给我们惹一些麻烦,那么其实最好的做法是干脆就不要这个字段了。但我想,为了保持格式上的一贯性,微软最终保留了这个字段。
这个默认的ETag不需要任何的配置就会存在(反过来,你如果要删除它倒是很不容易,这个问题后续也会提到),但我们可以继续添加自己想要的特殊ETag。也就是说,对于一个资源,实际上是可以有多个ETag的。
IIS7是默认开启ETag的,如果没有ETag,请按以下步骤设置:
打开Internet Information Services (IIS) Manager,如图双击HTTP响应头部(HTTPResponse Headers)
选择No Grouping标签,在空白处右键选择Add
设置Name为ETag,Value为双引号
配置web.config:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="ETag"value=""""/>
</customHeaders>
</httpProtocol>
...
</system.webServer>
完成,效果如图:
资源均来自第三方,谨慎下载,前往第三方网站下载