浏览器缓存小结

浏览器缓存小结

摘要

浏览器缓存小结

浏览器缓存小结

last-modified

浏览器第一次请求,服务器端返回200+ (last-modified:Fri, 27 Jan 2017 06:50:25 GMT)
下次请求的时候会将last-modified的值作为if-modified-since(if-modified-since:Fri, 27 Jan 2017 06:50:25 GMT)) 携带, 如果服务器端验证文档修改时间是否一样,一样表示没有修改.然后返回304.但是不返回body.(浏览器可以直接使用缓存内容.)否者返回200+最新body.

cache-control

cache-control和expires用于在判断客户端的内容缓存多久,即多久过期.过期后才发起请求.当然可能返回304并没有过期.注意cache-control是http1.1里定义的,expires是http1.0里定义的,前者优先级大于后者.

一般情况下expires=当前系统时间+缓存时间(cache-control:max-age)

etag

etag是http1.1中定义的,意思是”被请求变量的实体值”,可以简单理解为内容摘要,用于验证文件是否发生变化. etag和last-modified同时被返回的时候,浏览器会同时发送if-modified-since和if-none-match进行验证, http1.1的规定以及nginx的做法都是两者都验证通过后才返回304.

from cache

from cache什么时候才会被返回呢 ?如果请求一个页面的返回状态是304,此时当前页面上点击超链接再访问自身,浏览器返回的内容就是from cache 200了.

ctrl f5

ctrl+f5大家都知道,请求头不会携带if-modified-since,但是会带上cache-control:no-cache和program:no-cache. 然后服务器端肯定不再返回304,而是直接返回最新的内容.

以上几点就是关于浏览器缓存的小结.