HTTP缓存过程详解

HTTP缓存过程详解

http缓存作为面试常考题目,我们必须理解他的详细过程,接下来请大家务必理解并牢记这篇博客的所有内容,大家也不要闲内容多,因为http不管是在面试还是在工作中,真的很重要。而且在面试中,我们可以通过详细描述http缓存,不仅让面试官对我们有好感,还能拖延时间,让面试官少问其他比较难的问题。

HTTP文件缓存是基于HTTP协议的浏览器端文件缓存机制。
在文件重复请求的情况下,浏览器可以根据HTTP响应的协议头信息判断是从服务器端请求文件还是从本地读取文件。
Chrome控制台Application下的Frames就可以查看浏览器的HTTP文件缓存列表内容。

首先我们需要了解HTTP缓存的两种方式。

  • Expires:在HTTP1.1版本之前,浏览器缓存主要是通过对HTTP 1.0 的Expires头部控制来实现的,Expires只能根据绝对时间来刷新缓存内容。
  • Cache-Control:HTTP 1.1增加了Cache-Control头域,可以支持max-age用来表示相对过期时间

另外请求服务器时也可以根据EtagLast-Modified来判断是否从浏览器端缓存中加载文件,此时缓存的控制和判断将决定服务器的响应报文中头部内容的状态码200还是304。

浏览器发起请求,头部域字段的判断过程

  1. 浏览器会先查询Cache-Control (这里用Expires判断也是可以的,如果两者都设置了,则只有Cache-Control的设置生效)来判断内容是否过期,如果未过期,则直接读取浏览器端缓存文件,不发送HTTP请求,否则进入下一步。
  2. 在浏览器端判断上次文件返回头中是否含有Etag信息,有则带上If-None-Match字段信息发送请求给服务器,服务端判断Etag未修改则返回304,如果修改则返回200,否则进入下一步。
  3. 在浏览器端判断上次文件返回头中是否含有Last-Modifed信息,有则带上
    If-Modified-Since字段信息发送请求,服务端判断Last-Modified失效则返回200, 有效则返回
    304。
  4. 如果EtagLast-Modified都不存在,则直接向服务器请求内容。

这就是Cache-ControlEtagLast-Modified控制请求缓存的主要过程。

我们可以结合流程图来详细理解下HTTP缓存判断过程。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章