Http缓存相关
Posted 后厂村一枝花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Http缓存相关相关的知识,希望对你有一定的参考价值。
1、http传输的每一个环节基本上都会有缓存,基于请求-应答模式的特点,大致可以分为客户端缓存和服务器缓存,下面说的是浏览器的缓存:
浏览器发现缓存无数据,于是发送请求,像服务器获取资源
服务器响应请求,返回资源,同时标记资源的有效期
浏览器缓存资源,等待下次重用
2、服务器标记资源有效期使用的头字段是“Cache-Control”,里面的值“max-age=30”就是资源的有效时间,相当于告诉浏览器,“这个页面只能缓存30秒,之后就算是过期,不能用”,这个属性是http控制最常用的属性。
3、当在浏览器点几次刷新按钮后发现根本不是缓存的结果,为什么不起作用呢?
答:当你点刷新按钮的时候,浏览器会在请求头里加一个Cache-Control:max-age=0。因为max-age是生存时间,max-age=0的意思就是我要最新的数据,而本地缓存里的数据至少保存了几秒钟,所以浏览器就不会使用缓存,而是向服务器发请求,服务器看到max-age=0页就会用一个最新生成的报文回应浏览器。而crtl+f5的强制刷新,它其实是发了一个Cache-Control:no-cache,所以取到的数据是最新的。当点浏览器的前进、后退、重定向按钮,会发现没有发送网络请求,而是读取了磁盘上的缓存,原因是这些动作浏览器只用最基本的请求头,没有Cache-Control,所以就会检查缓存,直接利用之前的资源,不再进行网络通信。
4、缓存是优化系统性能的重要手段,http传输的每一个环节中都可以有缓存,服务器使用Cache-Contrl设置缓存策略,常用的是max-age,表示资源的有效期。浏览器收到数据就会存入缓存,如果没过期就可以直接使用,过期就要去服务器验证是否仍然可用;验证资源是否失效需要使用条件请求,常用的是if-Modified-Since和if-None-Match,收到304就可以服用缓存里的资源;验证资源是否被修改的条件有两个,last-modified和ETag,需要服务器预先在响应报文里设置,搭配条件请求使用;浏览器也可以发送Cache-Control字段,使用max-age=0或no-cache刷新数据
7、客户端上的缓存和代理上的缓存,可以使用两个新属性private和public。private表示缓存只能在客户端保存,是用户私有的,不能放在代理商与别人共享,而public的意识是缓存完全开发,谁都可以存,谁都可以用。计算机领域里最常用的性能优化手段是“时空转换”,也就是时间换空间,或者空间换时间,http缓存属于后者;缓存代理是增加了缓存功能的代理服务,缓存源服务器的数据,分发给下游的客户端;Cache-Control字段也可以控制缓存代理,常用的有private、s-maxage、no-transform等,同样必须配合last-modified、etag等字段才能使用;缓存代理有时候也会带来负面影响,缓存不良数据,需要及时刷新或删除。
8、计算机领域里的任何问题,都可以通过引入一个中间件来解决。
以上是关于Http缓存相关的主要内容,如果未能解决你的问题,请参考以下文章