HTTP缓存机制梳理
一般只对GET类型请求做缓存,对POST不做缓存
缓存协商
指浏览器和Web服务器之间对于是否使用浏览器端缓存的协商。对于较小的文件内容,由于缓存协商仍需要发送请求,所以吞吐率提高不大;但没有正文传输,节省了服务器带宽
1.Last-Modified/If-Modified-Since/304 绝对时间
Web服务器在响应头中添加Last-Modified,表示内容的上次更新时间。浏览器再次请求时,请求头中添加If-Modified-Since。Web服务器检查内容在这个时间后是否有更新,如果有更新(不管内容是否变化),返回全部内容。否则,返回不带正文的304
对于静态内容,Web服务器获得文件最后修改时间,并和浏览器询问的时间比较
2.Etag/If-None-Match
如果一个内容的Etag没有变化,那么文件内容也没有变化
Http1.1没有规定Etag的格式和计算方法,Web服务器可自行实现
对于下面情况Etag更好:文件频繁更新但内容不变;多台Web服务负载均衡,每个服务上文件的最后更新时间很难相同
彻底消灭请求
1.Expires 绝对时间
浏览器在过期之前无需每次请求服务器
Web服务器默认不开启,需手动开启
对常见的静态文件格式,即使服务器没返回Expires,浏览器也可能自行决定使用本地缓存
2. Cache-Control: max-age=3600
指定缓存过期的相对时间,单位秒。防止本地时间和服务器时间不一致。
浏览器一般将HTTP1.1作为首选,当同时有Expires和Cache-Control时,优先使用Cache-Control
如何请求页面
1. Ctrl+F5 强制刷新
直接向Web服务请求最新内容,不使用缓存协商
2. F5 一般刷新
允许浏览器做必要的缓存协商,但是不允许使用本地缓存
3.地址栏输入或点击超链接
这种用的最多,允许浏览器以最少的请求获取数据
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。