HTTP 协议缓存
创始人
2025-05-28 19:24:35

缓存的基本原理

在 C/S 架构中,最基本的缓存分为两种:

  • 服务器缓存
  • 客户端缓存

缓存的大致流程是:客户端向服务器发出请求,客户端会先查询本地缓存(判断本次请求的请求方法、请求路径在缓存中是否已存在),如果本地缓存有则直接使用缓存内容,否则正常请求服务器。服务器处理请求,给出响应结果,同时告诉客户端缓存本次请求的资源。

那么,问题来了,服务器要怎么做,客户端才知道去缓存资源?通过响应头,服务器在处理请求的时候,同时在响应头中加入缓存字段,客户端拿到响应结果时,根据响应头的缓存字段进行资源的缓存。

来自服务器的缓存指令

服务器会在响应头中加一些缓存字段:

  • Cache-Control:通常配置缓存方式,缓存时间(max-age)
    • no-cache: 表示每次请求都协商缓存
  • ETag:本次请求的资源编号
  • Date:服务器端响应时间
  • Last-Modified:资源上次更新时间

当客户端是浏览器时,浏览器会根据响应头缓存字段做以下操作:

  • 浏览器请求的资源会缓存到本地
  • 浏览器会标记这次请求的请求方法、请求路径
  • 浏览器会标记响应头中资源缓存的时间
  • 浏览器标记服务器响应时间

完整流程图:
在这里插入图片描述

来自客户端的缓存指令(协商缓存)

上面介绍了服务器端缓存指令,是通过响应头携带缓存字段告诉客户端如何缓存资源。当浏览器接收到响应头中的缓存字段后,会根据缓存字段进行资源缓存。

在客户端请求客户端时,客户端会先判断本地缓存是否存在,存在直接使用缓存,不存在直接请求服务器。具体流程如下:

  1. 客户端向服务器发出请求,客户端判断当前请求本地缓存是否存在
    • 本地缓存中是否能匹配到当前请求方法、请求路径
  2. 如果本地缓存中有,缓存是否还在有效期内
    • 如果本地缓存中有且缓存有效,客户端发送缓存请求
      • 客户端发送缓存请求,询问服务器当前缓存的资源是否有更改过
      • 缓存请求头设置
        • If-Modified-Since:缓存资源上次修改的时间(响应头 Last-Modified)
        • If-None-Match:缓存资源编号(响应头 ETag)
      • 服务器接收到缓存请求,进行响应
        • 无响应体
        • 响应状态码为 304 Not Modified
        • 响应头携带新的缓存指令
      • 服务器通知浏览器,缓存的资源没有修改,可以继续使用,同时更新缓存资源文件上次修改时间(携带新的缓存指令)
    • 缓存中有,但缓存无效,直接请求服务器
  3. 本地缓存没有,客户端直接请求服务器

完整流程图:
在这里插入图片描述

相关内容

热门资讯

重大发现.电娱互动到底有挂吗.... 重大发现.电娱互动到底有挂吗.曝光开挂猫腻!亲,电娱互动这个游戏其实有挂的,确实是有挂的,需要了解加...
「独家分享」心悦麻将.真的有挂... 「独家分享」心悦麻将.真的有挂吗[辅助神器下载]您好:心悦麻将这款游戏可以开挂,确实是有挂的,需要了...
分享实测“皇后斗牛究竟有没有挂... 您好:皇后斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5951795】很多玩家在皇后斗牛...
重大通报「天府麻舍」辅助软件!... 重大通报「天府麻舍」辅助软件!详细开挂教程亲.天府麻舍这款游戏是可以开挂的,确实是有挂的,通过添加客...
大家普及一下“众娱竞技有没有辅... 您好:众娱竞技这款游戏可以开挂,确实是有挂的,需要了解加客服微信【6676724】很多玩家在这款游戏...