强缓存和协商缓存

前言

计算机网络模型从底到上:物理层(光纤、网线)、链路层(MAC地址)、网络层(IP协议)、传输层(TCP\UDP)、应用层(HTTP\FTP\DNS)。HTTP协议是作用于应用层的,可以控制缓存。在浏览器中,缓存有两种策略:强缓存和协商缓存。

当浏览器第一次访问服务器的时候,服务器返回对应的资源并告诉浏览器把这个资源保存起来,下次需要的时候,只要没有过期,你就拿去用,不需要再问服务器拿。

常见的:我们第一次进入某个网站可能会比较慢,因为本地没缓存,全部都要去问服务器要。当再次访问这个网站的时候,大部分静态文件浏览器都缓存起来了,直接拿来用,会发现打开速度快很多,这就是缓存带来的好处。

为啥针对静态资源

因为对于接口数据api来说,静态资源要大很多,而且轻易不会修改。比如css样式、字体文件、图片,所以它们是不需要再次请求的,请求后保存在浏览器中,下次就可以直接访问。

强缓存和协商缓存的区别和联系

  1. 触发的先后顺序不同
    a. 先判断文件是否过期,没过期则使用强缓存,浏览器直接读取本地文件,状态码200(from memory cache)或者(from disk cache)
    b. 文件过期了,触发协商缓存,发起请求询问服务器该文件有没有更新,没有更新则使用浏览器本地缓存文件,若更新了则服务器返回新的文件给客户端,并更新新的过期时间并缓存起来。
  2. 是否访问服务器
    a. 强缓存不访问服务器,发起请求的时候看文件是否过期,没过期就直接用
    b. 协商缓存每次都要查询服务器,由服务器判断是否过期,没过期就直接用缓存里的,过期了服务器就返回新的文件

如何判断是否过期

在请求的Response Header中,有2个头部字段:Expires、cache-control
在这里插入图片描述
在这里插入图片描述
expires是http1.0的产物,代表资源过期的绝对时间,每个机器的本地时间不同会造成不一致。所以http1.1增加了cache-control,代表相对时间,从客户端接收到资源的那一刻起,经过多少【秒】才过期。

当expired和cache-control共存的时候,以cache-control为准。

浏览器在访问一个资源前,通过浏览器本地时间和上次接口返回的Response header中的expires、cache-control时间判断,就知道是否过期了。没过期就使用强缓存,过期了就使用协商缓存。

如何判断文件是否更新

请求的Response Header中有2个字段:最后更新时间(Last-Modified)和文件标识(ETag)
在一个请求中,Response Header里面,服务器会返回文件最后修改时间Last-Modified或最新文件标识ETag。

为啥Last-Modified不够,还要用ETag呢?因为某些文件虽然更新时间变了,但是内容其实没有变换,所以通过ETag来标识文件内容是否变更,有点像版本号的概念。

当发送相同请求时,Request Header加上:If-Modified-Since、If-None-Match
● If-Modified-Since的值对应Last-Modified的值
● If-None-Match的值对应ETag 的值

服务器拿到这2个值结合自身的实际情况判断,如果还是没有变更则告诉浏览器(code 304)这个文件没有变化,你可以继续使用缓存中的资源,并且更新expires和cache-control,让这个文件再次缓存服务器设置的时间。如果有变更了,则把新的资源重新返回给客户端(code 200),客户端重新缓存新的资源。
在这里插入图片描述

总结

● 强缓存和协商缓存都是针对静态资源
● 强缓存在前,协商缓存在后
● 资源未过期时触发强缓存,资源过期后触发协商缓存
● 判断是否过期:Expires(绝对时间)、cache-control(相对时间)
● 判断是否变更:Last-Motified和ETag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/467539.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:栈「详解」

目录 一,栈的定义 二,栈的基本操作 1,顺序栈 1.1顺序栈的基本概念 1.2顺序栈的基本操作 2,链栈 2.1链栈的基本概念 2.2链栈的种类 2.3链栈的基本操作 三,栈的应用 1,函数递归调用 2,…

【论文阅读笔记】Split frequency attention network for single image deraining

1.论文介绍 Split frequency attention network for single image deraining 用于单幅图像去噪的分频注意力网络 Paper Code 2023年 SIVP 2.摘要 雨纹对图像质量的影响极大,基于数据驱动的单图像去噪方法不断发展并取得了巨大的成功。然而,传统的卷积…

Go语言gin框架中加载html/css/js等静态资源

Gin框架没有内置静态文件服务,但可以使用gin.Static或gin.StaticFS中间件来提供静态文件服务。 效果图如下: 一、gin 框架加载 Html 模板文件的方法 方式1:加载单个或多个html文件,需要指明具体文件名 r.LoadHTMLFiles("vie…

Sketch软件:重塑UI/UX设计流程的革命性工具

Sketch是一款在Mac操作系统上运行的矢量图形设计软件,其功能特色丰富多样,深受设计师们的喜爱。以下是Sketch软件的主要功能特色介绍: 专业矢量图形设计:Sketch为UI设计、移动应用设计和Web设计等领域提供了强大的支持。它支持线条…

优化选址问题 | 基于NSGAII求解考虑成本、救援时间和可靠性的海上救援选址多目标问题附matlab代码

目录 问题代码问题 NSGA-II(非支配排序遗传算法II)是一种流行的多目标优化算法,用于解决具有多个冲突目标的问题。在海上救援选址问题中,我们可能希望同时优化成本、救援时间和可靠性。以下是一个简化的示例,说明如何使用NSGA-II算法来解决这个问题,并提供相应的MATLAB代…

【数据结构】布隆过滤器

目录 前言 1. 什么是布隆过滤器? 2. 布隆过滤器的原理 2.1 添加元素原理 2.2 判断元素存在原理 3. 布隆过滤器使用场景 4. 使用 Java 语言实现布隆过滤器 测试用例 测试结果 注:手机端浏览本文章可能会出现 “目录”无法有效展示的情况&#x…

Flutter-底部弹出框(Widget层级)

需求 支持底部弹出对话框。支持手势滑动关闭。支持在widget中嵌入引用。支持底部弹出框弹出后不影响其他操作。支持弹出框中内容固定头部和下面列表时,支持触摸头部并在列表不在头部的时候支持滑动关闭 简述 通过上面的需求可知,就是在界面中可以支持…

【早鸟优惠|高录用|EI稳定检索】2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)诚邀投稿/参会!

【早鸟优惠|高录用|EI稳定检索】 2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)诚邀投稿/参会! # 早鸟优惠 # 先投稿先送审 # #投稿免费参会、口头汇报及海报展示# 2024年虚拟现实、图像和信号处理国际学术会议(I…

京津冀自动驾驶产业盛会“2024北京国际自动驾驶技术展览会”

随着科技的飞速发展,自动驾驶技术成为了汽车产业变革的热点和前沿。智能化、网联化已经成为推动汽车产业创新发展的重要力量,而自动驾驶技术则是其中的关键一环。它不仅能够提高道路安全性、缓解交通拥堵,还能为乘客带来更加舒适、便捷的出行…

RediSearch比Es搜索还快的搜索引擎

1、介绍 RediSearch是一个Redis模块,为Redis提供查询、二次索引和全文搜索。要使用RediSearch,首先要在Redis数据上声明索引。然后可以使用重新搜索查询语言来查询该数据。RedSearch使用压缩的反向索引进行快速索引,占用内存少。RedSearch索…

Qt5.14.2 深入理解Qt多线程编程,掌握线程池架构实现高效并发

在高并发的软件系统中,多线程编程是解决性能瓶颈和提高系统吞吐量的有效手段。作为跨平台的应用程序开发框架,Qt为我们提供了强大的多线程支持。本文将深入探讨Qt多线程编程的实现细节,并介绍线程池的设计思想,帮助读者彻底掌握Qt…

Flutter-数字切换动画

效果 需求 数字切换时新数字从上往下进入,上个数字从上往下出新数字进入时下落到位置并带有回弹效果上个数字及新输入切换时带有透明度和缩放动画 实现 主要采用AnimatedSwitcher实现需求,代码比较简单,直接撸 import dart:math;import p…

huawei 华为交换机 配置手工模式链路聚合示例

组网需求 如 图 3-21 所示, SwitchA 和 SwitchB 通过以太链路分别都连接 VLAN10 和 VLAN20 的网络,SwitchA 和 SwitchB 之间有较大的数据流量。 用户希望SwitchA 和 SwitchB 之间能够提供较大的链路带宽来使相同 VLAN 间互相通信。 同时用户也希望能够提…

网页星光闪耀背景动画特效

网页星光闪耀背景动画特效 源码下载 网页星光闪耀背景动画特效

DockerHub搜索并拉取一个Redis镜像

1)去DockerHub搜索Redis镜像 2)查看Redis镜像的名称和版本 3)利用docker pull命令拉取镜像 4)利用docker save命令将 redis:latest打包为一个redis.tar包 5)利用docker rmi 删除本地的redis:latest 6)利用…

Github 2024-03-18 开源项目周报Top15

根据Github Trendings的统计,本周(2024-03-18统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6TypeScript项目2Go项目2JavaScript项目2非开发语言项目1HTML项目1CSS项目1Rust项目1Dart项目1C++项目1Jupyter Notebook项目1Electr…

创新应用2:nnmf+DBO+K-Medoids聚类,蜣螂优化算法DBO优化K-Medoids,适合学习和发paper。

创新应用2:nnmfDBOK-Medoids聚类,蜣螂优化算法DBO优化K-Medoids,适合学习和发paper。 一、蜣螂优化算法 摘要:受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发,提出了一种新的基于种群的优化算法(Dung Beetle Optim…

ONLYOFFICE文档8.0全新发布:私有部署、卓越安全的协同办公解决方案

ONLYOFFICE文档8.0全新发布:私有部署、卓越安全的协同办公解决方案 文章目录 ONLYOFFICE文档8.0全新发布:私有部署、卓越安全的协同办公解决方案摘要📑引言 🌟正文📚一、ONLYOFFICE文档概述 📊二、ONLYOFFI…

openssl3.2 - exp - openssl speed test

文章目录 openssl3.2 - exp - openssl speed test概述笔记表面上能列出的算法集合没列出的算法, 有的也支持不支持的算法的例子直接提示算法不支持算法的属性找不到到底哪些算法才是可以测试的算法?那看看哪些算法是支持的?包含支持的算法的名称数组在算法失败的提示处, 将支…

Qt文件以及文件夹相关类(QDir、QFile、QFileInfo)的使用

关于Qt相关文件读写操作以及文件夹的一些知识,之前也写过一些博客: Qt关于路径的处理(绝对路径、相对路径、路径拼接、工作目录、运行目录)_qt 相对路径-CSDN博客 C/Qt 读写文件_qt c 读取文本文件-CSDN博客 C/Qt读写ini文件_…