深入解析 Web 开发中的强缓存与协商缓存机制

news2024/11/22 23:21:30

在 Web 开发中,缓存机制是提高页面加载速度和用户体验的重要技术。缓存分为两种主要类型:强缓存和协商缓存。本文将详细介绍这两种缓存机制的原理、实现方式及其区别,并演示如何在 <meta> 元素中和 Nginx 服务器中进行缓存控制。

在这里插入图片描述

强缓存

强缓存(Strong Caching)是指在缓存期间,客户端不需要向服务器发送请求,直接从本地缓存中读取资源。这可以显著减少网络请求,提升页面加载速度。

实现方式

强缓存通过响应头中的 ExpiresCache-Control 实现:

  1. Expires

Expires 头指定资源的过期时间,是一个绝对时间点。超过这个时间点,缓存就会失效,浏览器必须再次请求资源。

  • 示例
Expires: Wed, 21 Oct 2021 07:28:00 GMT
  • 解析

Expires 指定的时间之前,浏览器会直接从缓存中读取资源,不会向服务器发送请求。

  1. Cache-Control

Cache-Control 头使用相对时间来指定资源的缓存时间,提供了更为灵活的缓存控制。常用的指令包括:

  • max-age:指定资源缓存的最大有效时间,单位为秒。

  • public:表示响应可以被任何缓存区缓存(如浏览器、CDN 等)。

  • private:表示响应只能被单个用户缓存(即浏览器),不能被共享缓存区缓存。

  • no-cache:缓存资源,但每次请求必须向服务器进行验证。

  • no-store:不缓存资源,每次请求都从服务器获取。

  • 示例

Cache-Control: max-age=3600
  • 解析

max-age=3600 指定资源可以缓存 3600 秒(1 小时)。在此期间,浏览器直接从缓存中读取资源。

协商缓存

协商缓存(Conditional Caching)是指在缓存过期后,客户端每次请求资源时都会向服务器验证缓存资源的有效性。只有在资源更新时才会下载新的资源,否则继续使用缓存。

实现方式

协商缓存通过 Last-Modified/If-Modified-SinceETag/If-None-Match 头实现:

  1. Last-Modified / If-Modified-Since
  • Last-Modified:服务器响应头,表示资源的最后修改时间。
Last-Modified: Wed, 21 Oct 2021 07:28:00 GMT
  • If-Modified-Since:客户端请求头,表示上次缓存的资源的最后修改时间。
If-Modified-Since: Wed, 21 Oct 2021 07:28:00 GMT
  • 工作原理

    • 客户端缓存资源时,记录资源的 Last-Modified 时间。
    • 下次请求该资源时,客户端在请求头中包含 If-Modified-Since
    • 服务器根据资源的最后修改时间和 If-Modified-Since 的值进行比较:
      • 如果资源未修改,返回 304 Not Modified,客户端继续使用缓存。
      • 如果资源已修改,返回新的资源和 200 OK,客户端更新缓存。
  1. ETag / If-None-Match
  • ETag:服务器响应头,表示资源的唯一标识符(如哈希值)。
ETag: "5d8c72a5edda3"
  • If-None-Match:客户端请求头,包含上次缓存的资源的 ETag。
If-None-Match: "5d8c72a5edda3"
  • 工作原理

    • 客户端缓存资源时,记录资源的 ETag。
    • 下次请求该资源时,客户端在请求头中包含 If-None-Match
    • 服务器根据资源的 ETag 和 If-None-Match 的值进行比较:
      • 如果 ETag 未变化,返回 304 Not Modified,客户端继续使用缓存。
      • 如果 ETag 已变化,返回新的资源和 200 OK,客户端更新缓存。

强缓存与协商缓存的区别

  • 强缓存

    • 在缓存有效期内,客户端不向服务器发送请求。
    • 通过 Exp

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】——驱动智能制造的青春力量,优化生产、预见故障、提升质量

目录 一.优化生产流程 1.1 数据收集 1.2 数据预处理 1.3 模型训练 1.4 优化建议 1.5 示例代码 二.预测设备故障 2.1 数据收集 2.2 数据预处理 2.3 模型训练 2.4 故障预测 2.5 示例代码 三.提升产品质量 3.1 数据收集 3.2 数据预处理 3.3 模型训练 3.4 质量提升…

X-Caps

用于对视觉属性进行编码的胶囊 补充信息 数据集太大&#xff0c;不建议复现

poi4.1导出excel支持xlx,xlsx格式,解决导出execl提示‘文件已经被损坏,无法打开‘

目录 一.maven jar包引入 二.xls格式 三.xlsx格式 一.maven jar包引入 注意&#xff0c;如果要用到xlsx格式&#xff0c;需要导入poi-ooxml <!-- https://mvnrepository.com/artifact/org.apache.poi/poi fx--><!-- 使用xls格式时,只要导入poi-version-yyyymmdd.ja…

# 全面解剖 消息中间件 RocketMQ-(4)

全面解剖 消息中间件 RocketMQ-&#xff08;4&#xff09; 一、RocketMQ 顺序消息分析 1、消息有序&#xff1a;指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ 可以严格的保证消息有序&#xff0c;可以分为分区有序或者全局有序。 2、顺序消费的原理解析 在默认的情…

oracle报错ORA-01940: cannot drop a user that is currently connected解决方法

目录 一.原因 二.解决方法 1.查询活动会话 2.记下SID和SERIAL# 3.断开会话 4.删除用户 一.原因 ORA-01940代表你正在删除一个有活动会话的用户 二.解决方法 1.查询活动会话 SQL> SELECT sid, serial#, username, programFROM v$sessionWHERE username 你要删除的u…

使用 Django Channels 构建实时聊天应用(包含用户认证和消息持久化)

文章目录 准备工作创建 Django 项目创建应用程序配置项目编写 Consumer编写路由创建 URL 路由运行应用用户认证消息持久化显示历史消息结论 Django Channels 是 Django 的一个扩展&#xff0c;允许在 Web 应用中添加实时功能&#xff0c;例如 Websockets、HTTP2 和其他协议。本…

CasaOS玩客云如何部署小雅AList并结合内网穿透远程访问海量资源

文章目录 前言1. 本地部署AList2. AList挂载网盘3. 部署小雅alist3.1 Token获取3.2 部署小雅3.3 挂载小雅alist到AList中 4. Cpolar内网穿透安装5. 创建公网地址6. 配置固定公网地址 前言 本文主要介绍如何在安装了CasaOS的玩客云主机中部署小雅AList&#xff0c;并在AList中挂…

原来Stable Diffusion是这样工作的

stable diffusion是一种潜在扩散模型&#xff0c;可以从文本生成人工智能图像。为什么叫做潜在扩散模型呢&#xff1f;这是因为与在高维图像空间中操作不同&#xff0c;它首先将图像压缩到潜在空间中&#xff0c;然后再进行操作。 在这篇文章中&#xff0c;我们将深入了解它到…

23中设计模式之一— — — —命令模式的详细介绍

命令模式 Command Pattern讲解 概念描述模式结构主要角色模式的UIM类图模式优点模式缺点应用场景实例演示类图代码演示运行结果 概念 命令模式&#xff08;别名&#xff1a;动作&#xff0c;事务&#xff09; 命令模式是一种行为设计模式&#xff0c;将一个请求封装为一个对象…

内网-2(代理)

一、代理概述 1、代理服务器(proxy server)&#xff1a;代理网络用户去取得网络信息&#xff0c;介于浏览器与web服务器之间的一条服务器。 注&#xff1a;为了方便&#xff0c;以下用B来代表浏览器的主机&#xff0c;S来代表服务器的主机。 2、正向代理和反向代理 正向代…

shell(一)

shell 既是脚本语言又是应用程序 查看自己linux系统的默认解析&#xff1a;echo $SHELL 创建第一个shell 文件 touch 01.sh编辑 vi 01.sh01.sh 文件内容 #!/bin/bash echo felicia保存 按Esc 然后输入:wq 定义以开头&#xff1a;#!/bin/bash #!用来声明脚本由什么shell解释…

如何在路由器上安装代理服务:详细教程

如何在路由器上安装代理服务&#xff1a;详细教程 步骤一&#xff1a;通过漏洞进入路由器系统开启Telnet服务使用Telnet登录路由器系统查看系统信息和CPU信息步骤二&#xff1a;交叉编译MIPS程序 Go对MIPS的支持 安装TFTP Server使用BusyBox tftp传输文件在路由器系统中下载编译…

Linux.小技巧快捷键

1. ctrl c 强制停止 终止某些程序的运行 也可以取消某行命令 2. ctrl d 退出或登出 进入python环境中&#xff0c;使用ctrl d 退出 3.history 查看历史使用了哪些命令 4. ! 历史最近使用的命令的开头 5.使用ctrl r 搜索历史使用的命令 按下 ctrl r 会进入 reverse -…

GIS赋能低空经济:开辟天空新蓝海

在21世纪的科技浪潮中&#xff0c;低空经济作为新兴业态正悄然崛起&#xff0c;成为继陆地、海洋之后的又一战略要地。本文旨在探讨GIS如何赋能低空经济&#xff0c;推动无人机应用、空中交通管理、低空物流、城市空域规划等领域的发展&#xff0c;开启天空经济的新纪元。 GIS…

Xmind Pro 2024 专业版激活码(附下载链接)

说到思维导图&#xff0c;就不能不提 Xmind。这是一款优秀的思维导图工具&#xff0c;拥有着丰富的导图模板&#xff0c;漂亮的界面和配色&#xff0c;以及各种各样的创意工具。 新架构速度更快 采用全新 Snowdancer 引擎&#xff0c;一种堪称「黑科技」的先进图形渲染技术。…

CrawlSpace爬虫部署框架介绍

CrawlSpace爬虫部署框架介绍 全新的爬虫部署框架&#xff0c;为了适应工作的爬虫部署的使用&#xff0c;需要自己开发一个在线编写爬虫及部署爬虫的框架&#xff0c;框架采用的是Django2.2bootstap依赖scrapyd开发的全新通用爬虫在线编辑部署及scrapy项目的部署框架。项目实现的…

VCRUNTIME140_1.dll是什么?VCRUNTIME140_1.dll缺失的7个不同解决方法详解

vcruntime140_1.dll是Microsoft Visual C 2015运行时库的一部分&#xff0c;它为使用Visual C 2015编译的应用程序提供了必要的运行时支持。该文件包含多个关键的运行时组件&#xff0c;包括标准模板库(STL)、C异常处理、内存管理等。 功能: vcruntime140_1.dll确保应用程序能…

在人工智能背景下,程序员要有什么职业素养,怎么改进

文章目录 1. 持续学习和适应能力原因改善方法 2. 跨学科知识原因改善方法 3. 高效的计算资源利用原因改善方法 4. 模型解释性和可控性原因改善方法 5. 数据隐私和安全意识原因改善方法 在AI大模型的背景下&#xff0c;程序员要有什么职业素养&#xff0c;怎么改进&#xff0c;才…

电流继电器JL-31 柜内固定安装 约瑟JOSEF

JL系列电流继电器型号&#xff1a; 电流继电器JL-31 电流继电器JL-31C/1 电流继电器JL-31A 电流继电器JL-31/B 电流继电器JL-32BP 电流继电器JL-22 电流继电器JL-21 电流继电器JL-21B 电流继电器JL-23 电流继电器JL-11 电流继电器JL-11/2G 电流继电器JL-11C 电流继电器J…

5.23.3 乳腺癌成像中的深度学习:十年的进展和未来方向

乳腺影像学在早期诊断和干预以改善乳腺癌患者的预后方面发挥着重要作用。在过去的十年中,深度学习在乳腺癌成像分析方面取得了显着进展,在解释乳腺成像模式的丰富信息和复杂背景方面具有巨大前景。 基于深度学习的乳腺癌成像研究涵盖了对乳房X光检查、超声、磁共振成像和数字…