浏览器缓存:强缓存与协商缓存实现原理有哪些?

1、强缓存 :设置缓存时间的,那么在这个时间内浏览器向服务器发送请求更新数据,但是服务器会让其从缓存中获取数据。

可参考:
彻底弄懂强缓存与协商缓存 - 简书

2、协商缓存每次都会向浏览器询问,那么是怎么询问的呢?

cache-control: no-cache,每次请求都回询问服务端,那么是如何询问?

当浏览器发送的请求中包含**Cache-Control: no-cache** 时,意味着浏览器不希望使用本地缓存的副本,而是希望向服务器询问资源是否有更新。浏览器如何询问服务器是否有更新,这是通过HTTP协议的机制来实现的。

具体来说,服务器会通过以下几种方式来告诉浏览器是否有更新:

  1. ETag/If-None-Match : 服务器为每个资源分配一个唯一的ETag标识(Entity Tag)。如果下次请求时,客户端发送的If-None-Match头部包含之前服务器分配的ETag,则表示客户端想知道服务器自上次给予的ETag之后,资源是否有更新。

  2. Last-Modified/If-Modified-Since : 服务器在响应请求时,会通过Last-Modified头部告知资源的最后修改时间。如果下次请求时,客户端发送的If-Modified-Since头部包含之前服务器告知的最后修改时间,则表示客户端想知道自此时点之后,资源是否有更新。

  3. 200 OK with content: 如果服务器判定资源有更新或者是必须重新发送的,会响应200 OK状态码和新的资源内容。

  4. 304 Not Modified: 如果服务器判定资源自客户端上一次请求以来未更改,会响应304 Not Modified状态码,表示客户端可以继续使用本地缓存的副本。

以下是一个简单的HTTP请求和响应示例,展示了使用Cache-Control: no-cache时浏览器如何询问服务器资源是否有更新:

在这个例子中,请求中包含了If-None-MatchIf-Modified-Since头部,询问服务器资源自指定时间以来是否有更新。服务器根据这些头部以及资源的当前状态,如果有更新,则响应200 OK和新的资源内容;如果没有更新,则响应304 Not Modified,表示可以继续使用客户端的缓存副本。

相关推荐
Avan_菜菜5 小时前
AI 能写代码了,为什么我反而开始要求它先写文档?
前端·github·ai编程
JieE2129 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2129 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
爱勇宝10 小时前
鸿蒙生态的下半场:开发者不只要能开发,还要能赚钱
android·前端·程序员
IT_陈寒13 小时前
SpringBoot这个自动配置坑我跳了三次
前端·人工智能·后端
kyriewen13 小时前
我用 AI 一周写完了整个项目,上线第一天就崩了——这是我踩过最贵的 5 个坑
前端·javascript·ai编程
Larcher13 小时前
AI Loop:让AI像人一样自主完成任务的核心机制
javascript·人工智能·设计模式
默_笙13 小时前
🃏 JS 只有 8 种数据类型,但我花了 2 天才搞懂 null 和 undefined 的区别
javascript
牧艺13 小时前
从零到协同:构建类飞书在线文档系统的五个技术重难点
前端·人工智能
jump_jump14 小时前
流式 HTML:从 htmx 片段装配到浏览器原生增量渲染
javascript·性能优化·前端工程化