- ETag: Entity Tag 实体标签,是web服务器和浏览器用于确认缓存组件的有效性的一种机制。浏览器通过返回的expires判断缓存是否新鲜;如果过期了,浏览器在重用它之前首先得检查它是否仍然有效,这称作 条件get请求。如果浏览器缓存的组件是有效的,则服务器不会返回整个组件,只会返回304。
- 服务器在检测缓存组件是否和原服务器组件一致时,有两种方式:比较最新修改日期(服务器响应last-modified,浏览器使用if-modified-since回传服务器进行比较,若比较一致,则返回304)、比较实体标签(http1.1中引入,唯一标识一个组件的一个版本的字符串,需要以引号引起来,服务器响应ETag, 浏览器if-none-match回传到服务器进行比较,若匹配,返回304)。
- etag的意义:提供了一个比最新修改时间更灵活的机制。
- etag的问题:对服务器集群、代理来说,etag会不匹配,降低缓存效率
- if-none-match比if-modified-since有更高的优先级。
- 即便配置了很长的expires头,当用户reload或者refresh时,仍会产生条件get请求。如果需要通过除最新修改日期之外的一些东西来验证,则etag是一种强大的方法,否则最好简单的移除(etag性能问题)。
结论:需要配置或者直接移除etag.