【前端 · 面试 】HTTP 总结(七)—— HTTP 缓存概述

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战css

最近我在作前端面试题总结系列,感兴趣的朋友能够添加关注,欢迎指正、交流。html

争取每一个知识点可以多总结一些,至少要作到在面试时,针对每一个知识点均可以侃起来,不至于哑火。前端

前言

缓存是应用程序中很重要的一个概念,在有大量数据交换的应用程序中,咱们会采起一些方式将那些实时性要求不高的数据生成副本并存储在某个相对来讲可快速到达、访问、获取的仓库,这样在须要这些数据的时候咱们直接从这个仓库中获取数据。git

缓存的目的主要有两点:面试

  • 提高数据交换的性能(速度)
  • 提升用户体验
  • 减小网络传输
  • 缓解服务器或数据库的压力

HTTP 缓存做为 WEB 性能优化的重要手段,对于从事 Web 开发的同窗们来讲,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同窗来讲是必备的知识技能。数据库

概念

HTTP 缓存指的是: 当客户端向服务器请求资源时,会先抵达浏览器缓存,若是浏览器有“要请求资源”的副本,就能够直接从浏览器缓存中提取而不是从原始服务器中提取这个资源。编程

常见的 HTTP 缓存只能缓存 GET 请求响应的资源,对于其余类型的响应则无能为力,因此后续说的请求缓存都是指 GET 请求。浏览器

HTTP 根据是否要向服务器发送请求将缓存规则分为了两类:缓存

  • 强缓存
  • 协商缓存

HTTP 缓存都是从第二次请求开始的。性能优化

第一次请求资源时,服务器返回资源,并在响应头中回传资源的缓存参数;第二次请求时,浏览器判断这些请求参数,命中强缓存就直接200,不然就把请求参数加到请求头中传给服务器,看是否命中协商缓存,命中则返回 304,不然服务器会返回新的资源。

缓存规则

当用户开始访问一个网站时,浏览器会从目标服务器获取一些资源用以构建最终的 WEB 页面,好比 css、js、html 等静态文件。

假设咱们不采起任何措施,则用户每次访问这个网站都要发起一系列 HTTP 请求,试想,若是这个网站的 pv 达到上百万甚至上千万,会对网站的后台服务器形成多大的压力。

为了尽量提高网站的性能,HTTP 协议给出了一个优化方案,其大致规则以下图所示:

image-20210807194116881

  • 当用户第一次请求一个资源时的时序图,浏览器会先询问是否有命中缓存
  • 没有命中的缓存则浏览器再从服务器获取资源并将资源放进缓存仓库中,下次则能够从缓存中拿资源了。

为方便理解,咱们认为浏览器提供了缓存数据库,只要浏览器发现知足了某些缓存规则,就能够直接从缓存数据库中取出你须要的资源。

上述是一个简单过程,可是事实上的缓存策略还要更复杂一点。下面是一个较为完整的缓存流程:

HTTP 缓存流程

总结

  • HTTP 缓存是保存在浏览器上的
  • HTTP 缓存是应用程序性能优化的重要手段
  • HTTP 缓存针对的是那些时效性不是很强的资源,好比 JS、CSS、HTML 等
  • HTTP 缓存分为强缓存和协商缓存
  • HTTP 缓存的相关设置参数都是在头信息中携带的

以上就是有关 HTTP 缓存的概述内容,后面我会详细讲解强缓存和协商缓存的原理和应用。

~

~本文完,感谢阅读!

~

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

你们好,我是〖编程三昧〗的做者 隐逸王,个人公众号是『编程三昧』,欢迎关注,但愿你们多多指教!

你来,怀揣指望,我有墨香相迎! 你归,不管得失,惟以余韵相赠!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

相关文章
相关标签/搜索