1.1时代:
- 响应头里给两个东西,一个是cache,一个是Etag:
- 在文件响应头上写Cache-control:max-age = 3600
- 自动缓存一个小时(这一个小时内,如果有谁访问同一个url,同一个查询参数,则不发送请求)
- Etag(特征值):假如一年缓存到期,拿着Etag去问,这个缓存能不能删除。
- 如何去问(内容协商,在强缓存过期之后):
- 发送这么一个请求(访问JS的时候询问现在存有的Etag能不能删):if-None-Match:ABC(浏览器向服务器发的一个询问)。
- 如果服务器返回的是304:别删,继续用,我还没更新。
- 如果服务器返回的是200:删了,我给你最新的。
- 发送这么一个请求(访问JS的时候询问现在存有的Etag能不能删):if-None-Match:ABC(浏览器向服务器发的一个询问)。
1.0时代
- Expires:Wed, 21 Oct 2015 02:30:00 GMT 给定一个时间,到时间后就过期,但是用户的系统时间可能是错乱的。 同样,如果过了这个时间,这个缓存要不要删掉呢?
- 浏览器也给了一个特征值:是最后一次更新的时间Last-Modified,进行内容协商,拿着最后更新的时间问要不要删:如果要删,就返回200,如果不要删,就返回304。
- 问题:如果一个文件在一秒钟之内改了几次呢?精度太粗了,如果一秒钟内改变了就无法区分。
- 所以1.0时代的两个内容有bug
- Expires的bug是用户时间可能错乱。
- Last-Modified的bug是1秒内可能修改多次。
pragma
MDN已经明确不推荐使用。