0
点赞
收藏
分享

微信扫一扫

谈谈http缓存

http是日常工作中打交道最多的技术之一,无论页面要渲染具体内容的html,还是与后台数据的读取。都离不开它。

缓存的好处

http缓存可以减少接口的请求,减少带宽,以及浏览器主进程对网络请求的开销。例如:客户端访问一个服务器读取同一个信息文件。那么,多次请求的结果都一样,就没必要反复与服务端创建连接,下载数据。此外,缓存可以避免时延,减少对网络和服务器负载影响的依赖。这样在弱网下,也可以保持尽可能被正常使用。

缓存的方式

强缓存和协商缓存是http缓存的两大方式。

强缓存是通过HTTP请求头上的cache-control和expires字段完成的。原理就是服务器会对资源加一个有效期,当再次请求资源时,用当前时间和有效期进行比较。在有效期的则算命中缓存了。

然后我们再说下Cache-Control和Expires的区别。

  • Cache-Control: max-age:

max-age值定义了文档的最大使用期——从第一次生成文档到文档不再新鲜,无法使用为止,最大的合法生存时间(以秒为单位)

  • Expires:

指定一个绝对的过期日期,如果过期日期已经过了,就说明文档不在新鲜了,不过由于我们可以去更改客户端的时间,因此可以更改缓存命中的结果。因此我们优先使用Cache-Control

Cache-Control指令:

  • no-cache和no-store:

no-cache表示必须先与服务器确认返回的响应是否发生了变化,然后才能使用响应来满足后续对同意网址的请求。因此如果存在合适的验证令牌(ETag),no-cache会发起往返通信来验证缓存的响应,但如果资源未发生变化,则可避免下载

no-store表示直接禁止浏览器以及所有中间缓存存储任何版本的返回响应,例如,包含个人隐私数据或银行业务数据的响应。每次用户请求该资产时,都会向服务器发送请求,并下载完整的响应

  • public与private:

public出现再响应首部,则即使他有关联的HTTP验证,甚至响应状态代码代码通常无法缓存,也可以缓存响应。大多数情况下,public不是必须的,因为明确的缓存信息(例如max-age)已表示响应是可以缓存

相比之下,浏览器可以缓存private响应。不过这些响应通常只为单个用户缓存,因此不允许任何中间缓存对其进行缓存,例如,用户的浏览器可以缓存包含用户私人信息的HTML网页,但CDN不能缓存

  • max-age:

指令指定从请求的时间开始,允许获取的响应被重用的最长时间。例如max-age=60表示可以在接下来的60s缓存和重用响应

  • must-revalidate:

must-revalidate告诉缓存,再事先没有跟原始服务器进行再验证的情况下,不能提供这个对象的陈旧副本,缓存仍然可以随意提供新鲜的副本。如果在缓存进行must-revalidate新鲜度检查时,原始服务器不可用,缓存就必须返回一条504错误

举报

相关推荐

如何清除http缓存 HTTP缓存(ETag)

谈谈 Java HTTP 基本认证

http 缓存

http缓存

前端缓存之http缓存

Http缓存详解

0 条评论