【http】缓存协议

✨ 专栏介绍

在当今互联网时代,计算机网络已经成为了人们生活和工作中不可或缺的一部分。而要实现计算机之间的通信和数据传输,就需要依靠各种网络协议来进行规范和约束。无论是浏览网页、发送电子邮件还是进行在线交流,都离不开各种各样的网络协议。在本专栏中,我们将深入学习各种常见的网络协议,如HTTP、TCP/IP、UDP、DNS等。我们将探索这些协议的工作原理、数据包结构、状态管理以及与其他协议的关系。此外,我们还将介绍网络安全和加密技术,以及常见的网络攻击和防御方法。通过学习这些内容,你将能够更好地理解计算机网络的运作原理,并能够应用这些知识来解决实际问题和优化网络性能。让我们一起开始探索网络协议的奥秘吧!点击订阅网络协议专栏


摘要

本文将深入探讨HTTP缓存协议的基本原理、缓存策略以及来自服务器和客户端的缓存指令。我们将详细解析缓存标志和相关头部字段,以帮助开发人员更好地理解和应用HTTP缓存机制。

1. 缓存的基本原理

HTTP缓存是一种机制,用于在客户端和服务器之间存储已请求资源的副本。当客户端再次请求相同资源时,可以直接从缓存中获取,而无需再次向服务器发送请求。这样可以减少网络流量、提高性能和用户体验,极大的降低了服务器的处理压力。

HTTP缓存的基本原理如下:

  • 客户端发送请求到服务器,并在响应中获取资源。
  • 服务器在响应中发送与资源相关的头部字段,用于控制资源的缓存行为。
  • 客户端根据这些头部字段来决定是否将资源保存到缓存中。
  • 当客户端再次请求相同资源时,会先检查是否存在有效的缓存副本。如果存在,则直接从缓存中获取资源。

2. 缓存策略

这里就设计到一个缓存策略的问题,这些问题包括:

  • 哪些资源需要加入到缓存,哪些不需要?
  • 缓存的时间是多久呢?
  • 如果服务器的资源有改动,客户端如何更新缓存呢?
  • 如果缓存过期了,可是服务器上的资源并没有发生变动,又该如何处理呢?

为了有效利用HTTP缓存,需要制定适当的缓存策略。以下是常见的缓存策略:

  • 强制缓存:当资源被强制缓存在客户端时,下一次请求时将直接从客户端获取,而不发送请求到服务器。这是通过设置响应头部字段来实现的。
  • 协商缓存:当资源未被强制缓存在客户端时,客户端发送请求到服务器,并根据服务器返回的响应判断是否使用已有的副本。这是通过与服务器进行协商来实现的。

3. 来自服务器的缓存指令

服务器可以通过响应头部字段发送缓存指令,以指示客户端如何缓存资源。以下是常见的服务器缓存指令:

  • Cache-Control:这是最常用的服务器缓存指令,用于控制资源的缓存行为。常见的Cache-Control指令包括:

    • max-age:指定资源在客户端缓存中的有效期(以秒为单位)。例如,max-age=3600表示资源在客户端缓存有效期为3600秒。
    • no-cache:表示客户端不能直接使用已有的副本,需要先与服务器进行验证。
    • no-store:表示响应不能被任何形式的缓存进行保存,每次请求都需要从服务器获取最新版本。
  • ETag:ETag是服务器为每个资源分配的唯一标识符。它可以是资源内容的哈希值、版本号或任何其他能够唯一标识资源的字符串。当客户端再次请求资源时,可以将上次获取资源时服务器返回的ETag值发送给服务器,以便服务器判断资源是否发生了变化。如果ETag值匹配,服务器可以返回304 Not Modified,客户端可以直接从缓存中获取资源。

  • Date:Date是响应头部字段,表示响应生成的日期和时间。它通常由服务器自动生成,并用于协助缓存控制和验证机制。当客户端发送请求时,会将上次获取资源时服务器返回的Date值发送给服务器。这有助于服务器判断客户端请求是否在资源过期之前发出。 这些缓存指令和头部字段在HTTP协议中起着关键作用,帮助服务器和客户端进行缓存控制、协商和验证。

  • Last-Modified:Last-Modified是响应头部字段,表示资源的最后修改时间。服务器在响应中发送该字段,以便客户端在下一次请求时将该值发送回服务器进行协商缓存。当客户端再次请求资源时,可以将上次获取资源时服务器返回的Last-Modified值发送给服务器。如果资源在该时间之后未发生修改,服务器会返回304 Not Modified,客户端可以直接从缓存中获取资源。 这个字段用于协商缓存机制,通过比较资源的最后修改时间来判断是否需要重新获取资源。

  • Expires

    http1.0版本中,是通过Expires响应头来指定过期时间点的,例如:

    Expires: Thu, 23 Apr 2023 22:08:38 GMT
    

    到了http1.1版本,已更改为通过Cache-Controlmax-age来记录了。

4. 客户端的缓存指令

客户端可以通过请求头部字段发送缓存指令,以告知服务器其拥有的资源副本情况。以下是常见的客户端缓存指令:

  • If-Modified-Since:用于协商缓存,客户端将上次获取资源时的Last-Modified值发送给服务器。服务器会比较资源的最后修改时间,如果未发生变化,则返回304 Not Modified,客户端可以直接从缓存中获取资源。
  • If-None-Match:用于协商缓存,客户端将上次获取资源时的ETag值发送给服务器。服务器会比较资源的ETag值,如果匹配,则返回304 Not Modified,客户端可以直接从缓存中获取资源。

如何判断缓存是否有效呢?

缓存有效

就是把max-age + Date,得到一个过期时间,看看这个过期时间是否大于当前时间,如果是,则表示缓存还没有过期,仍然有效,如果不是,则表示缓存失效。

当浏览器发现缓存有效时,完全不会请求服务器,直接使用缓存即可得到结果
此时,如果你断开网络,会发现资源仍然可用
这种情况会极大的降低服务器压力,但当服务器更改了资源后,浏览器是不知道的,只要缓存有效,它就会直接使用缓存

缓存无效

当浏览器发现缓存已经过期,它并不会简单的把缓存删除,而是问问服务器,我这个缓存还能继续使用吗?
于是,浏览器向服务器发出了一个带缓存的请求,又称之为协商缓存

带缓存的请求则是加上If-Modified-SinceIf-None-Match的请求头。

服务器可能会产生两个情况:

  • 缓存已经失效 (200)
  • 缓存仍然有效(304)

5. 缓存标志

HTTP协议中使用一些标志来表示资源是否被缓存或如何进行缓存。以下是常见的缓存标志:

  • Public:表示响应可以被任何中间代理服务器(如CDN)和客户端进行缓存。
  • Private:表示响应只能被特定用户代理(如浏览器)进行缓存。
  • No-Cache:表示响应不能被直接使用,需要先与服务器进行验证。
  • No-Store:表示响应不能被任何形式的缓存进行保存。

结论

HTTP缓存协议是提高性能和用户体验的重要机制。通过理解缓存的基本原理、制定适当的缓存策略以及使用服务器和客户端的缓存指令,开发人员可以更好地利用HTTP缓存机制。同时,了解和使用缓存标志可以更精确地控制资源的缓存行为。通过合理应用HTTP缓存协议,我们可以减少网络流量、提高性能,并提供更好的用户体验。


😶 写在结尾

JavaScript(ES6)专栏

在这里插入图片描述

JavaScript是一种广泛应用于网页开发和后端开发的脚本语言。它具有动态性、灵活性和易学性的特点,是构建现代Web应用程序的重要工具之一。在这个专栏中,我们将深入探讨JavaScript语言的基本语法、DOM操作、事件处理、异步编程以及常见算法和数据结构等内容。此外,我们还将介绍ES6(ECMAScript 2015)及其后续版本中引入的新特性,如箭头函数、模块化、解构赋值等。通过学习这些内容,你将能够成为一名熟练的JavaScript开发者,并能够应用这些知识来构建出高质量和可维护的Web应用程序。点击订阅JavaScript(ES6)专栏

前端设计模式专栏

在这里插入图片描述

设计模式是软件开发中不可或缺的一部分,它们帮助我们解决了许多常见问题,并提供了一种优雅而可靠的方式来构建应用程序。在本专栏中,我们介绍了所有的前端设计模式,包括观察者模式、单例模式、策略模式等等。通过学习这些设计模式,并将其应用于实际项目中,我们可以提高代码的可维护性、可扩展性和可重用性。希望这个专栏能够帮助你在前端开发中更好地应用设计模式,写出高质量的代码。点击订阅前端设计模式专栏

Vue专栏

在这里插入图片描述

Vue.js是一款流行的JavaScript框架,用于构建用户界面。它采用了MVVM(Model-View-ViewModel)的架构模式,通过数据驱动和组件化的方式,使开发者能够更轻松地构建交互性强、可复用的Web应用程序。在这个专栏中,我们将深入探讨Vue.js的核心概念、组件开发、状态管理、路由和性能优化等方面的知识。我们将学习如何使用Vue.js构建响应式的用户界面,并探索其强大的生态系统,如Vue Router和Vuex、Pinia。通过学习这些内容,你将能够成为一名熟练的Vue.js开发者,并能够应用这些知识来构建复杂而高效的Web应用程序。点击订阅Vue专栏

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

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

相关文章

工具系列:TensorFlow决策森林_(9)自动超参数调整

文章目录 介绍超参数调整算法使用TF Decision Forests进行超参数调整设置在没有自动超参数调整的情况下训练模型使用自动化超参数调整和手动定义超参数训练模型使用自动化超参数调整和自动定义超参数的模型训练(推荐方法)使用Keras Tuner训练模型 *(替代…

jmeter-set up先登录获取token,再测试

一、何为setup 一种特殊类型的线程组,可用于执行预测试操作;简单来讲就是执行测试线程组前,先执行setup 作用 例如前面,我们说到的,压测之前只用JMeter调用业务接口造数或者通过JDBC操作数据库造数,可以放…

搬运机器人RFID传感器CNS-RFID-01|1S的RS485(MODBUS|HS协议)通讯连接方法

搬运机器人RFID传感器CNS-RFID-01|1S支持RS485通信,可支持RS485(MODBUS RTU)协议、RS485-HS协议,广泛应用于物流仓储,立库 AGV|无人叉车|搬送机器人等领域,常用定位、驻车等,本篇重点介绍CNS-RF…

IPC之十:使用共享文件进行进程间通信的实例

IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,常用的 IPC 方式有管道、消息队列、共享内存等,但其实使用广大程序员都熟悉的文件也是可以完成 IPC 的,本文介绍如何使用共享文件实现进程间通信,本文给出了具体的实…

在线文稿演示应用PPTist

PPTist 是一个基于 Vue3.x TypeScript 的在线演示文稿(幻灯片)应用,还原了大部分 Office PowerPoint 常用功能,支持文字、图片、形状、线条、图表、表格、视频、音频、公式等几种最常用的元素类型,每一种元素都拥有高…

【bug】uniapp一键登录,自定义协议条款是否支持内部路由?

uniapp一键登录的自定义协议条款,不支持内部路由跳转 在uniapp文档上搜一键登录 加二维码之后可以提问

助力打造清洁环境,基于轻量级YOLOv8开发构建公共场景下垃圾堆放垃圾桶溢出检测识别系统

公共社区环境生活垃圾基本上是我们每个人每天几乎都无法避免的一个问题,公共环境下垃圾投放点都会有固定的值班时间,但是考虑到实际扔垃圾的无规律性,往往会出现在无人值守的时段内垃圾堆放垃圾桶溢出等问题,有些容易扩散的垃圾比…

Flink电商实时数仓(六)

交易域支付成功事务事实表 从topic_db业务数据中筛选支付成功的数据从dwd_trade_order_detail主题中读取订单事实数据、LookUp字典表关联三张表形成支付成功宽表写入 Kafka 支付成功主题 执行步骤 设置ttl,通过Interval join实现左右流的状态管理获取下单明细数据…

支付宝、学习强国小程序input、textarea数据双向绑定

前言 和 vue 的绑定有些区别,需要注意。直接 value"{{inputValue}}" 是无法双向绑定的。 正确思路 文档说的比较详细,不过没有组合使用的案例,需要自行理解。这里正确的方法是先用 value 绑定数据,再使用 onInput 事件…

(GCC) 库的操作

文章目录 预备静态库生成链接环境区别 动态库生成链接环境区别 END参考ar指令 预备 准备两个文件&#xff0c;以最简单的形式进行展示。 add.c int add(int x, int y) {return x y; }main.c 为了方便直接在头文件中声明函数 #include <stdio.h>extern int add(int,…

【C++初阶】九、STL容器中的string类(上)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【C初阶】八、初识模板&#xff08;泛型编程、函数模板、类模板&#xff09;-CSDN博客 目录 一 . STL简介 什么是STL STL的版本 HP 原始版本&#xff1a; P.J. 版本&#xff1a; R…

HBase基础知识(四):HBase API

HBase还提供了API&#xff0c;我们可以通过编程的方式来进行对HBase的操作。 1. 环境准备 新建项目后在 pom.xml 中添加依赖&#xff1a; <dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifa…

2023年教程汇总 | 《小杜的生信笔记》

2023年总结 2023年即将结束&#xff0c;我们即将迎来2024年。2023年&#xff0c;我们做了什么呢&#xff1f;&#xff1f;这个是个值得深思的问题…? 12月份是个快乐且痛苦时间节点。前一段时间&#xff0c;单位需要提交2023年工作总结&#xff0c;真的是憋了好久才可以下笔…

重塑资产管理:三叠云助力企业高效运营

资产管理是企业管理中不可或缺的一环&#xff0c;它对企业的经营管理和决策起着至关重要的作用。资产管理涉及到企业的固定资产、无形资产、流动资产等各类资产&#xff0c;它们的管理情况影响着企业的经济效益和运营效率。因此&#xff0c;企业需要建立一套完善的资产管理体系…

Apache Commons Math: 面向Java的数学和统计库

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天要聊的是Apache Commons Math这个宝藏级的Java库。为啥说它是宝藏呢&#xff1f;因为它简直就是处理数学问题的瑞士军刀&#xff0c;无论你是要搞统计分析、数值计算&#xff0c;还是解决优化问题&#…

geyser互通服基岩版进不去

Java版需要在服务器安全组开通TCP端口&#xff08;如果有宝塔&#xff0c;也需要开通&#xff09; geyser下载好的安装运行也需要开通端口&#xff0c;但是它是UDP的&#xff08;但是我同时也开启了TCP&#xff0c;可能不需要&#xff1f; Java 版玩家隧道 Java 版玩家使用 T…

VMware安装linux系统二

1、设置光驱 1.1、编辑虚拟机设置 1.2、设置虚拟机镜像 1.3、设置好后开机 2、安装Linux系统 2.1、等待安装 2.2、开始安装 2.3、选择语言&#xff0c;我选择中文 2.4、本地化不用改 2.5、软件选择一定要选&#xff0c;否则就会是默认最小安装 2.6、我这里选择的是带GUI的&am…

Windows下安装Oracle19C

官网下载oracle19c 以及客户端 官网地址&#xff1a;Software Download | Oracle 这个是要登录账号的,没有的可以注册,登录上 这个时候在点开这个官网:Database Software Downloads | Oracle 往下面滑 点了之后有个界面注意事项勾上,点下载,你就会下载: 安装oracle19c 解压安…

WebRTC概念

定义 一个实时通信标准 通话原理 媒体协商 在WebRTC中&#xff0c;参与视频通讯的双方必须先交换SDP信息&#xff0c;获得一个都支持的编码格式 网络协商 目的&#xff1a;找到一条相互通讯的链路 做法&#xff1a;获取外网IP地址映射&#xff0c;通过信令服务器交换“网…

RK3588平台开发系列讲解(AI 篇)RKNN-Toolkit2 模型的加载转换

文章目录 一、Caffe 模型加载接口二、TensorFlow 模型加载接口三、TensorFlowLite 模型加载接口四、ONNX 模型加载五、DarkNet 模型加载接口六、PyTorch 模型加载接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 RKNN-Toolkit2 目前支持 Caffe、TensorFlow、Tensor…