原始服务器通过Last-Modified响应头来返回组件额最新修改日期。例如:
第一次请求时,浏览器会缓存组件以及它的最新修改日期,下一次请求时,浏览器会用If-Modify-Since头将最新修改日期传回到原始服务器进行比较,如果原始服务器上组件的最新修改日期与浏览器传回值匹配,就会返回一个304响应,而不会传Content-Length
中值的字节数,如下。
ETag则提供了另一种方式,用于检测浏览器缓存中的组件与原始服务器上的组件是否匹配。ETag在HTTP1.1中引入,标识了一个组件的一个特定版本的字符串,唯一的格式是约束该字符串必须用引号引起来,例如:
接着,如果浏览必须验证一个组件,会使用If-None-Match头将Etag传回原始服务器,如果Etag是匹配的,就是返回3.04状态码,使响应减少Content-Length中值的字节数,如下。
ETag的加入为验证实体提供了比最新修改日期更为灵活的机制,例如:如果实体依据User-Agent
或Accept-Language
头而改变,实体的状态可以反映在Etag中。