HTTP 缓存

缓存

web缓存是可以自动保存常见的文档副本的HTTP设备,当web请求抵达缓存时,如果本地有已经缓存的副本,就可以从本地存储设备而不是从原始服务器中提取这个文档。使用缓存有如下的优先。

  1. 缓存减少了冗余的数据传输
  2. 缓存环节了网络瓶颈的问题
  3. 缓存降低了对原始服务器的要求
  4. 缓存降低了距离时延。

冗余的数据传输

很多客户端访问一个流行的原始服务器页面的时候,服务器会多次传送同一份文档。每次传送给一个客户端,一些相同的字节会在网络中一遍遍地传输。这些冗余的数据传输会耗尽昂贵的网络带宽,降低传输速度,加重 Web 服务器的负载。

带宽瓶颈

很多网络中为本地网络客户端提供的带宽比远程服务器提供的带宽要宽。客户端会以路径上最慢的网速访问服务器。如果客户端从一个快速局域网的缓存中得到了一份副本,那么缓存就可以提高性能,尤其是要传送较大的文件的时候。

瞬间拥塞

缓存在破坏瞬间拥塞的时候显得十分重要,突发事件回事很多人去访问一个web文件,会出现瞬间拥塞,由此会造成过多流量峰值会使得web服务器发生毁灭性的崩溃。

距离时延

客户端和服务器之间没有太多的路由器,光速自身也会造成显著的时延。

命中和未命中的

缓存可以在任意时刻,任意的频率对副本进行验证。 缓存对缓存的副本进行在验证的时候,会向原始服务器发送一个小的在验证请求,如果内容没有发生变化,服务器会以一个小的304not modified进行响应,只要缓存知道副本任然有效,就会将副本标识为暂时新鲜的。并将副本提供给客户端这被称作再验证命中或缓慢命中。
HTTP提供了几个对已缓存对象进行在验证的工具,if-modified-since 。将这个首部添加到get请求中,就可以告诉服务器,只有在缓存了对象的副本之后,又对其进行了修改的情况下,才可以发送对象。
服务器内容未修改,服务器内容已经修改,或者服务器上的对象被删除了。服务器收到GETIf-modified-since请求时候会发生的情况。

  • 再验证命中: 如果服务器对象未被修改,服务器会向客户端发送一个小的HTTP304NotModified响应
  • 再验证未命中: 如果服务器对象与已缓存副本不同,服务器向客户端发送一条普通的,带有完整内容的HTTP200OK响应
  • 对象被删除: 如果服务器对象已经被删除了,服务器就回送一个 404 Not Found 响应,缓存也会将其副本删除。
    缓存命中率: 由于缓存提供服务请求所占的比例被称为缓存命中率
    字节命中率: 缓存提供的字节在传输的所有字节中所占的比例
    HTTP 没有为用户提供一种手段来区分响应是缓存命中的,还是访问原始服务器得到的。在这两种情况下,响应码都是200OK,说明响应有主体部分。有
    些商业代理缓存会在Via首部附加一些额外信息,以描述缓存中发生的情况。客户端有一种方法可以判断响应是否来自缓存,就是使用 Date 首部。将响应中
    Date 首部的值与当前时间进行比较,如果响应中的日期值比较早,客户端通常就可以认为这是一条缓存的响应。客户端也可以通过 Age 首部来检测缓存的响应,通过这个首部可以分辨出这条响应的使用期

缓存的拓扑结构

私有缓存: Web 浏览器中有内建的私有缓存——大多数浏览器都会将常用文档缓存在你个人电脑的磁盘和内存中,并且允许用户去配置缓存的大小和各种设置。还可以去看看浏览器的缓存中有些什么内容
公有代理缓存:公有缓存是特殊的共享代理服务器,被称为缓存代理服务器
在这里插入图片描述

在这里插入图片描述

相关首部字段

Cache-Control: max-age: 文档的最大使用期
Expires: 指定一个绝对的过期日期
If-Modified-Since: :如果从指定日期之后文档被修改过了,就执行请求的方法
If-None-Match: : 服务器可以为文档提供特殊的标签
在这里插入图片描述

强弱验证器: 只要内容发生了变化,强弱验证器就会发生变化。

Cache-Control: no-store 和 Cache-Control: no-cache

Cache-Control: no-store: 禁止缓存对响应进行复制,缓存通常会像非缓存代理服务器一样,向客户端转发一条no-store响应。
Cache-Control: no-cache: 响应实际上是可以存储再本地缓存区中的,必须和服务器进行新鲜度验证,才能提供给客户端使用
Cache-Control: max-age=3600 表示的是从服务器将文档传来之时起,可以认为文档处于新鲜状态的秒数。
Expires: 实际的过期日期,而不是秒数。
Cache-Control: must-revalidate 响应首部告诉缓存,可以再实现没有和原始服务器进行再缓存的情况下,不能提供这个对象的陈旧副本。缓存仍然可以随意提供新鲜的副本。如果在缓存进行must-revalidate新鲜度检查时,原始服务器不可用,缓存就必须返回一条504Gateway Timeout错误。
在这里插入图片描述

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

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

相关文章

MySQL学习之InnoDB引擎,索引

Mysql中的引擎 我们先来看一下MySql提供的有哪些引擎 mysql> show engines; 从上图我们可以查看出 MySQL 当前默认的存储引擎是InnoDB,并且在5.7版本所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。 查看MySQL当前默认的存储引…

算法力扣刷题记录 五十一【654.最大二叉树】

前言 二叉树篇,继续。 记录 五十一【654.最大二叉树】 一、题目阅读 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。…

套接字编程一(简单的UDP网络程序)

文章目录 一、 理解源IP地址和目的IP地址二、 认识端口号1. 理解 "端口号" 和 "进程ID"2. 理解源端口号和目的端口号 三、 认识协议1. 认识TCP协议2. 认识UDP协议 四、 网络字节序五、 socket编程接口1. socket 常见API2. sockaddr结构(1&#…

WebGIS的Web服务概述

WebGIS是互联网技术应用于GIS开发的产物,是现代GIS技术的重要组成部分,其中的Web服务是现代WebGIS的核心技术和重要标志,它集GIS、程序组件和互联网的优点于一身,深刻改变了GIS开发和应用的方式,绕过了本地数据转换和本…

Unity 批处理详讲(含URP)

咱们在项目中,优化性能最重要的一个环节就是合批处理,,在早期Unity中,对于合批的处理手段主要有三种: Static Batching Dynamic Batching GPU Instancing 如今Unity 为了提升合批范围与效率,提供了…

ICT测试原理

目录: 一、什么是ICT 二、ICT在哪使用 三、ICT如何测试 1、隔离(Guarding)原理 2、电容器测试原理 3、电感器测试原理 4、普通二极管测试方法(MODE D) 5、晶体管的测量原理 (三端点)(MODE TR) 6、短/开路的测试原理 1)学习短路表 2&#xff…

基于chrome插件的企业应用

一、chrome插件技术介绍 1、chrome插件组件介绍 名称 职责 访问权限 DOM访问情况 popup 弹窗页面。即打开形式是通过点击在浏览器右上方的icon,一个弹窗的形式。 注: 展示维度 browser_action:所有页面 page_action:指定页面 可访问绝大部分api 不可以 bac…

【数据结构】排序算法——Lessen1

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

【动态专修】2024年五菱维修手册和电路图资料更新

经过整理,2017-2024年五菱汽车全系列已经更新至汽修帮手资料库内,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表…

人、智能、机器人……

在遥远的未来之城,智能时代如同晨曦般照亮了每一个角落,万物互联,机器智能与人类智慧交织成一幅前所未有的图景。这座城市,既是科技的盛宴,也是人性与情感深刻反思的舞台。 寓言:《智光与心影》 在智能之…

Python自动化DevOps任务入门

目录 Python自动化DevOps任务入门 一、环境和工具配置 1. 系统环境与Python版本 2. 虚拟环境搭建 3. 必要的库安装 二、自动化部署 1. 使用Fabric进行流式部署 2. 使用Ansible编写部署剧本 三、持续集成和测试 1. 配置CI/CD工具 选择工具 配置工具 构建和测试自动…

【SLAM】最最最简单的直线拟合情形下的多种求解方法

本文我们讨论一个最最最简单情况下的拟合的情形,并尝试使用不同的方法来进行求解。 假如有一组数 x 1 , x 2 , x 3 , . . . , x n x_1,x_2,x_3,...,x_n x1​,x2​,x3​,...,xn​,对应的值为 y 1 , y 2 , y 3 , . . . , y n y_1,y_2,y_3,...,y_n y1​,y2…

10.11和10.8那个大(各种ai的回答)

问题:10.11和10.8两个数哪个大 腾讯混元 ✔️ chatGPT ❎ 通义千问 ❎ 文心一言 ✔️ 智谱清言 ❎ 讯飞星火 ✔️ C知道 ❎ 豆包 ✔️

TCP粘包问题详解和解决方案【C语言】

1.什么是TCP粘包 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输协议,它保证了数据的可靠性和顺序性。然而,由于TCP是基于字节流而不是消息的,因此在传输过…

【接口自动化_08课_Pytest+Yaml+Allure框架】

上节课一些内容 的补充 1、openxl这个方法,第一个元素是从1开始的,不是从0开始 回写的列在程序里写的是11,是因为是固定值 一、1. Yaml入门及应用 1、什么是yaml YAML(/ˈjməl/,尾音类似camel骆驼)是一…

Finding columns with a useful data type 找到合适的数据列的类型

Finding columns with a useful data type 在确定了原始查询的数据列数之后,接下来就是要确定合适的数据列的数据类型。可以用 SELECT a 的方式判断对应的数据列方式,有时候可以通过错误信息判断数据列的类型。如果服务器的响应没有报错,而…

Docker启动PostgreSql并设置时间与主机同步

在 Docker 中启动 PostgreSql 时,需要配置容器的时间与主机同步。可以通过在 Dockerfile 或者 Docker Compose 文件中设置容器的时区,或者使用宿主机的时间来同步容器的时间。这样可以确保容器中的 PostgreSql 与主机的时间保持一致,避免在使…

启动流程和切换流程

启动流程 #mermaid-svg-iUWGw8xl1SyAmoo9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-iUWGw8xl1SyAmoo9 .error-icon{fill:#552222;}#mermaid-svg-iUWGw8xl1SyAmoo9 .error-text{fill:#552222;stroke:#552222;}#…

C语言·分支和循环语句(超详细系列·全面总结)

前言:Hello大家好😘,我是心跳sy,为了更好地形成一个学习c语言的体系,最近将会更新关于c语言语法基础的知识,今天更新一下分支循环语句的知识点,我们一起来看看吧~ 目录 一、什么是语句&#xf…

linux配置podman阿里云容器镜像加速器

1.下载podman yum install -y podman systemctl status podman systemctl start podman 2.获取阿里云个人容器镜像加速器地址 访问阿里云官网:首先,您需要访问阿里云(Alibaba Cloud)的官方网站。阿里云官网的URL是:…