浏览器的缓存机制(仅仅涉及如何设置浏览器使用或不使用缓存) 浏览器的缓存机制1、Cache-Control/PragmaExpires(过期时间)Last-Modified/Etag
浏览器的缓存机制
浏览器是一个比较复杂但是又比较重要的机制,我们在浏览一个页面发现有异常的情况下,通常考虑的就是是不是浏览器做了缓存,一般的做法就是按Ctrl+F5组合键重新请求一次这个页面,但是为什么重新请求的就一定是请求到没有缓存的页面呢?
如果是按Ctrl+F5组合键刷新页面,那么浏览器会直接向目标URL发送请求,而不会使用浏览器缓存的数据请求到服务端,也可能访问到的是缓存数据,,比如会在应用服务器的前端部署一个缓存服务器。所以,要保证用户能够看到最新的数据,必须通过http来控制HTTP的请求头返回数据
按Ctrl+F5刷新页面时HTTP的请求头的数据
这次请求时头部增加了一个Cache-Control: 配置,同作用的还有Pragma: 。为什么增加这个配置呢,有什么作用?
这个HTTP Head字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令,HTTP Head字段有一些可选值,值及其说明如下表所示:
HTTP Head字段的可选值
可选值说明Public所有内容都将被缓存,在响应头中设置Private内容只被缓存到私有缓存中,在响应头中设置no-cache所有内容不会被缓存,在请求头和响应头中设置no-store所有内容都不会被缓存或Internet临时文件中,在响应头中设置must-revalidation/proxy-revalidation如果缓存的内容失效,请求必须发送到服务器/代理器进行重新验证,在请求头中设置max-age=xxx缓存的内容将在xxx秒后失效,这个选项只在HTTP1.1中可用,和Last-Modifide一起使用时优先级较高,在响应头中设置Cache-control请求字段被浏览器支持的较好,而且优先级较高,推荐使用,和其他的请求字段(入Expires)同时出现时,Cache-control会覆盖其他字段
Pragma与Cache-control作用类似
Expires通常使用格式为Expires:Sat,25 Feb 2019 12:12:12 GMT ,后面跟着一个日期和时间,超过这个时间后,缓存的内容将失效,浏览器发请求时会先检查这个字段,看看是否过期,如果已过期就重新向服务器发送请求
Last-Modified/EtagLast-Modified字段一般用于表示一个服务器上的资源的最后修改时间,资源是静态内容(静态资源自动加上Last-Modified字段)或者动态资源,通过这个最后修改时间可以判断当前请求的资源是否是最新.
一般服务器端在响应头中返回一个Last-modified:Sat,25 Feb 2019 12:12:12 GMT字段,高数浏览器这个页面的最后修改时间, 浏览器再次请求时在请求头中加上If-Modified-Since:Sat,25 Feb 2019 12:12:12 GMT,询问当前缓存的页面是否是最新的,如果是最新的就返回302状态码,服务器不会传输最新的数据
HTTP协议的响应头,请求头详解:.
HTTP返回码大全