Last-Modified 和 Etag
这里我不准备再次截图,读者可以自己使用firebug观察下etag的工作方式,我要强调一下就是同时存在Etag和Last-Modified的时候,Etag的优先级要高
我们现在要介绍另外一个缓存协商的方法,因为在某些场景下Last-Modified可能工作的并不愉快,比如有一种情况,我们的Web服务器上面的文件最后修改时间会频繁的变动,但是文件内容却没有修改。那么对于Last-Modified的缓存协商,每次都会重新获取文件,而不会使用缓存。
还有一种生产中比较常见的场景,比如我们在集群环境中,相同的网页可能被保存在不同的服务器上,在负载均衡的时候用户的请求会被分配到这些不同的服务器中,但是我们很难保证相同的文件在所有服务器上的最后修改时间都是一致的。那么这样用户请求被分发到时间不对的服务器上时,可能会导致浏览器会重新获取网页内容。
Etag这个时候站出来勇敢的承担一切,HTTP1.1协议中并没有规定Etag的具体格式和生产的方法,总之Web服务器可以给每一个静态文件都生产一个标签,或者叫指纹,总之是一个唯一标识符(比如给文件做一个md5),当文件内容改变的时候就修改这个标签,这样浏览器和Web服务器之间就通过询问网页的Etag是否改变来进行缓存协商。
这里我不准备再次截图,读者可以自己使用firebug观察下etag的工作方式,我要强调一下就是同时存在Etag和Last-Modified的时候,Etag的优先级要高。