http缓存详解

news2025/7/9 9:24:33

为什么要缓存

通过http协议在客户端和服务端建立连接需要消耗时间,重复访问同一个资源,增加访问服务器数据资源的成本,因此,利用浏览器的缓存机制重用以前获取的数据来优化性能
1、 减少了网络延迟,加快了页面响应速度,增强了用户体验;
2、 减少了网络带宽消耗嘛。(就近获取);
3、 通过缓存,我们都不用到服务器 (origin servers)去请求了,从而也就相应地减轻了服务器的压力。
说到浏览器中的缓存机制,就相当于http协议定义的缓存机制,一般我们会想到http响应头中的Expires,Cache-Control,Last-Modified,If-Modified-Since,Etag这样与缓存相关的响应头信息

Web缓存的种类

  1. 数据库缓存
    当web应用的关系比较复杂,数据库中的表很多的时候,如果频繁进行数据库查询,很容易导致数据库不堪重荷。可以将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,从而提高响应速度和效率。常见的数据库缓存技术有memcache和redis。
  2. CDN缓存
    网站管理员部署,为了让他们的网站更容易扩展并获得更好的性能。
    浏览器先向CDN网关发起Web请求,网关服务器后面对应着一台或多台负载均衡源服务器,会根据它们的负载请求,动态将请求转发到合适的源服务器上。从浏览器角度来看,整个CDN就是一个源服务器,从这个层面来说,浏览器和服务器之间的缓存机制,在这种架构下同样适用。
  3. 代理服务器缓存
    代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。
    代理服务器缓存,其实跟下面即将讲的浏览器缓存性质差不多,差别就是代理服务器缓存面向的群体更广,规模更大而已。即,它不只为一个用户服务,一般为大量用户提供服务,同一个副本会被重用多次,因此在减少相应时间和带宽使用方面很有效。
  4. 浏览器缓存
    每个浏览器都实现了 HTTP 缓存,我们通过浏览器使用HTTP协议与服务器交互的时候,浏览器就会根据一套与服务器约定的规则进行缓存工作。当我们点击浏览器上‘后退’或者‘前进’按钮时,显得特别有用。
  5. 应用层缓存
    应用层缓存是指我们在代码层面上做的缓存。通过代码逻辑,把曾经请求过的数据或资源等,缓存起来,再次需要数据时通过逻辑上的处理选择可用的缓存的数据。

浏览器缓存

什么是浏览器缓存

浏览器缓存包括HTTP 缓存、cookie、localstorage 、sessionStorage
HTTP 缓存
通过设置请求和响应的header参数,来实现HTTP 缓存
HTTP 缓存分为强制缓存和协商缓存
强制缓存:不向服务器发送请求,直接从缓存中读取资源
协商缓存:在使用本地缓存前,先向服务器发送请求,服务器会根据请求的request header的一些参数判断是否读取缓存,是,则返回304状态,并带上新的response header通知浏览器从缓存中读取资源
缓存涉及到的参数属性名:Expires/cache-control/last-modify/etag
其中Expires和Cache-Control为强缓存用来确定确定缓存的存储时间,Last-Modified 和Etag为协商缓存则用来确定缓存是否要被更新。

浏览器缓存指本地使用的计算机开辟一个内存区、同时也开辟一个磁盘区作为数据传输的缓冲区,然后用这个缓冲区来暂时保存用户以前访问过的信息
缓存位置:
Server Worker -> Memery Cache (内存中的缓存)-> Disk Cache(硬盘中的缓存) -> Push Cache
CPU:处理器,计算机的运算核心和控制中心。电脑靠CPU运算和控制,让电脑各个部分顺利工作
硬盘:存储资料和软件等数据的设备,容量大,断电数据不消失
内存:负责硬盘等硬件上的数据和CPU之间的数据交换,体积小,速度快,断电清空

强制缓存

  1. Expires:HTTP1.0中用来控制缓存时间的参数,header里包含日期/时间,用GMT格式的字符串表示, 即在此时间之后,响应过期
  2. cache-control: HTTP1.1中用来控制缓存时间的参数
  • no-store: 表示禁止缓存;也就是说每次用户请求资源时,都会向服务器发送一个请求,每次都会下载完整的响应。
  • no-cache:表示用协商缓存;缓存资源,但立即过期,每次请求都需要跟服务器对比验证资源是否被修改。(等同于max-age=0);表示必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求。因此,如果存在合适的验证令牌 (ETag),no-cache 会发起往返通信来验证缓存的响应,如果资源改,可以避免下载未被更
  • max-age: 设置资源被缓存的最长时间(单位是秒),在此时间内,访问资源直接读取本地缓存,不向服务器发出请求。(与expires同时出现时,max-age优先级更高)
  • s-maxage: 规则等同max-age,覆盖max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),并且私有缓存中它被忽略。(与expires或max-age同时出现时,s-maxage优先级更高)
  • public: 表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存。
  • private: 表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器例如CDN不能缓存它)。

服务器响应浏览器请求时响应头中的Cache-Control响应头使得每个资源都可以通过 Cache-Control HTTP 头来定义自己的缓存策略,Cache-Control 指令用来告诉我们,哪个资源在什么条件下可以缓存,以及可以缓存多久

协商缓存

Last-modified: 源头服务器认定的资源做出修改的日期及时间。客户端请求之后,服务器可能会比较客户端的If-Modified-Since(上次请求的last-modified的值)和当前版本资源的最后修改时间做对比。精确度比Etag低(精确到秒,如果在1s内修改资源,再加载客户端拿不到最新资源)。Last-Modified优先级低于Etag。
Etag:服务器通过 ETag HTTP 头传递资源文件对应的hash值。当浏览器在资源过期后再次请求时,浏览器默认会通过If-None-Match传递Etag,通过服务器资源的hash(只要文件内容改动,ETag就会重新计算)对比可以进行高效的资源更新检查:如果一致,表示资源未更改,返304状态。
304状态告诉客户端,它的缓存版本是最新的,并应该使用它。

浏览器缓存过程

浏览器缓存

  1. 浏览器第一次加载资源,服务器返200,浏览器下载该资源,并把response header及该请求的返回时间一并缓存
  2. 再次加载资源,先比较两次加载的时间,如果小于max-age,则不需要向服务器发送请求,直接从本地缓存中读取资源;如果时间过期,则向服务器发送header并带有if-none-Match和if-Modify-Since请求
  3. 服务器收到请求,优先根据Etag判断请求文件是否更改,Etag值没改,则命中协商缓存,返304;如果有改动,则返回新资源,并带上最新的Etag,并返回200.
  4. 若服务器收到的请求中无Etag,则将if-Modify_Since和文件的最后修改时间做对比,一致,则命中协商缓存,返304;不一致则返回新的last-Modify和文件并返回200
    缓存策略

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

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

相关文章

分析全志Tina打包流程,并在buildroot上来实现打包生成tina镜像,支持PhoenixSuit烧写

本文转载自全志在线:https://bbs.aw-ol.com/topic/1532/ 步骤简述 首先记录下官方 tina-sdk 打包的log输出。 bookvirtual-machine:~/D1s-Core/tina-d1-h$ pack ---- PACK_CHIP sun20iw1p1 PACK_PLATFORM tina PACK_BOARD d1-h-nezha PACK_KE…

Vue.js 中的指令和组件详解

Vue.js 中的指令和组件详解 在 Vue.js 中,指令和组件是两个非常重要的概念,它们都可以用来扩展 Vue.js 的功能,但它们之间有一些不同之处。本文将对 Vue.js 中的指令和组件进行详细的介绍,并附上相关的代码示例。 指令 在 Vue.j…

华为OD机试真题 Java 实现【找最小数】【2023 B卷 100分】,附详细解题思路

一、题目描述 给一个正整数num1,计算出新正整数num2,num2为num1中移除N位数字后的结果,需要使得num2的值最小。 二、输入描述 输入的第一行为一个字符串,字符串由0~9字符组成,记录正整数num1,num1的长度…

2.1 网络io、io多路复用select/poll/epoll、基于事件驱动的reactor

目录 一、网络IO请求二、一请求一线程三、IO多路复用——select的通俗理解1、select函数2、accpet函数3、recv函数 四、IO多路复用——poll五、IO多路复用——epoll1、epoll_create2、epoll_ctl3、epoll_wait4、epoll_event5、边缘触发和水平触发) 五、区别对比1、s…

axios、跨域与JSONP、防抖和节流

文章目录 一、axios1、什么是axios2、axios发起GET请求3、axios发起POST请求4、直接使用axios发起请求 二、跨域与JSONP1、了解同源策略和跨域2、JSONP(1)实现一个简单的JSONP(2)JSONP的缺点(3)jQuery中的J…

Wwise内存问题

1)Wwise内存问题 ​2)安卓平台特效显示不一致的问题 3)多个矩形小方块组成的地形接缝处有黑线问题 这是第339篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大…

nginx系列第七篇:结合nginx讨论“惊群”问题

目录 1.什么是惊群 2.linux下socket通信之accept"惊群"现象 3.select/poll/epoll"惊群"现象 4.nginx中的惊群处理 1.什么是惊群 "惊群"是多个进程(线程)阻塞在某个系统调用上等待事件触发,当事件触发后,这些睡眠的进程…

数位dp训练笔记

依稀还记得去年寒假的时候对数位dp的恐惧达到了顶峰,打死也不想做一题,也是怎么学都学不会,甚至板子也只是真的去网上copy了一份,自己也都不理解。(羞愧) 这个状态持续了一年多(羞愧羞愧&#…

Windows操作/文件/设置/DOS 记录

目录 1.系统操作 1.环境变量 2.文件夹操作 1.显示隐藏文件夹 3.DOS窗口 1.DOS窗口中docker切换管理员root /]#身份: docker run -it centos​编辑 4.文件操作 1.图片分辨率无损修改尺寸(例1280x800) 2.图片修改png/jpg文件后缀类型 1.系统操作 1.…

Python 语句

文章目录 一、条件语句1、顺序语句2、条件语句3、缩进和代码块4、条件语句练习5、空语句 二、循环语句1、while2、for3、break和continue 一、条件语句 1、顺序语句 从上到下依次执行 2、条件语句 Python中使用if else关键字表示条件语句. ①if if expression:do_somethi…

PCB板的Mark点设计对SMT重要性

Mark点也称光学点、基准点,是电路板元器件组装中,PCBA应用于自动贴片机上的位置识别点。 Mark点的选用,直接影响到自动贴片机的贴片效率,因此在设计时,需要设计好Mark点以及其在板内的位置。 Mark点的设计 1、布局位…

String s = new String(“xyz“) 创建了几个对象?

这个问题相信每个学习 java 的同学都不陌生,作为一个经典的面试题,到现在工作这么多年了我真是认为挺操蛋的一个问题,在网上到现在你仍然可以看见很多讨论这个问题的人,其中不乏工作很多年的人都有争论,我认为还是有必…

GreatSQL删除分区慢的跟踪

GreatSQL删除分区慢的跟踪 背景 某业务系统,每天凌晨会删除分区表的一个分区(按天分区),耗时较久,从最开始的30秒,慢慢变为1分钟,影响到交易业务的正常进行。 在测试环境进行了模拟,复现了删除分区慢的情…

市场火爆!三大发展优势加速汽车零部件行业布局

当前,中国新能源汽车自主品牌崛起,为汽车零部件发展带来新机遇;有别于传统汽车零部件市场,新能源领域,主机厂标准提升,对数字化要求逐渐提高,汽车零部件企业的智能制造异常重要,企业…

二分类结局变量Logistic回归临床模型预测(二)——3. 单因素多因素logistic回归分析及三线表(三)

本节讲的是二分类结局变量的临床模型预测,与之前讲的Cox回归不同,https://lijingxian19961016.blog.csdn.net/article/details/124088364https://lijingxian19961016.blog.csdn.net/article/details/124088364https://lijingxian19961016.blog.csdn.net/article/details/1300…

1929-2022年全球站点的逐月最低气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据! 之前我们分享过1929-2022年全球气象站…

Qt学习之旅 -信号与槽

文章目录 点击关闭窗口自定义信号和槽自定义信号和槽解决重载问题信号和连接信号断开连接Qt4版本信号槽连接Lambda表达式 点击关闭窗口 connect(信号发送者,发送的具体信号,信号接收者,型号的处理(槽slot));这里自定义的MyPushButton与QPushButton别无二…

【NLP】KMP匹配算法

一、说明 KMP算法。也称为Knuth-Morris-Pratt字符串查找算法可在一个字符串S内查找一个词W的出现位置。一个词在不匹配时本身就包含足够的信息来确定下一个匹配可能的开始位置,此算法利用这一特性以避免重新检查先前配对的字符。将时间复杂度从O(M*N)降为O(N). 这个…

C++ Primer Plus 第三章习题

目录 复习题 1. 为什么C有多种整型? 2. 声明与下述描述相符的变量? 3. C 提供了什么措施来防止超出整型的范围? 4. 33L和33之间有什么区别? 5. 下面两条C语句是否等价? 6. 如何使用C来找出编码88表示的字符&…

又一个生物标志物ADMA被发现!可为OA治疗提供新方向!

文章标题:Metabolite asymmetric dimethylarginine (ADMA) functions as a destabilization enhancer of SOX9 mediated by DDAH1 in osteoarthriti 发表期刊:Science Advances 影响因子:14.95 作者单位:浙江大学医学院附属邵逸…