HTTP 缓存的那些事儿

HTTP协议特性之缓存Cache——NodeJs版 说明:本篇文章以Chrome浏览器作为客户端,以Websrtom开启nodejs服务端。 一、如何查看浏览器端的缓存 1、chrome://cache,如果出现如下界面,说明浏览器版本较高,不支持直接查看。请采用第二种方式。 2、使用chrome cache view工具 二、数据请求示例——不使用缓存 nodejs开启服务端,便于Chrome请求数据。 数据交互如下: ht... 阅读详情

在这里插入图片描述


阅读原文


前言

HTTP 缓存机制作为 Web 应用性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系的基础环节,也是想要成为前端架构的必备技能。


缓存的作用

我们为什么使用缓存,是因为缓存可以给我们的 Web 项目带来以下好处,以提高性能和用户体验。

  • 加快了浏览器加载网页的速度;
  • 减少了冗余的数据传输,节省网络流量和带宽;
  • 减少服务器的负担,大大提高了网站的性能。

由于从本地缓存读取静态资源,加快浏览器的网页加载速度是一定的,也确实的减少了数据传输,就提高网站性能来说,可能一两个用户的访问对于减小服务器的负担没有明显效果,但如果这个网站在高并发的情况下,使用缓存对于减小服务器压力和整个网站的性能都会发生质的变化。


缓存规则简介

为了方便理解,我们认为浏览器存在一个缓存数据库,用于存储缓存信息(实际上静态资源是被缓存到了内存和磁盘中),在浏览器第一次请求数据时,此时缓存数据库没有对应的缓存数据,则需要请求服务器,服务器会将缓存规则和数据返回,浏览器将缓存规则和数据存储进缓存数据库。

在这里插入图片描述

当浏览器地址栏输入地址后请求的 index.html 是不会被缓存的,但 index.html 内部请求的其他资源会遵循缓存策略,HTTP 缓存有多种规则,根据是否需要向服务器发送请求主要分为两大类,强制缓存和协商缓存。


强制缓存

1、强制缓存流程

强制缓存是第一次访问服务器获取数据后,在有效时间内不会再请求服务器,而是直接使用缓存数据,强制缓存的流程如下。

在这里插入图片描述

2、强制缓存判断到期时间

那么如何判断缓存是否到期呢?其实还是根据第一次访问时服务器的响应头来实现的,在 HTTP 1.0 版本和 HTTP 1.1 版本有所不同。

在 HTTP 1.0 版本,服务器使用的响应头字段为 Expires,值为未来的绝对时间(时间戳),浏览器请求时的当前时间超过了 Expires 设置的时间,代表缓存失效,需要再次向服务器发送请求,否则都会直接从缓存数据库中获取数据。

在 HTTP 1.1 版本,服务器使用的响应头字段为 Cache-Control,有多个值,意义各不相同。

  • private:客户端可以缓存;
  • public:客户端和代理服务器都可以缓存(对于前端而言,可以认为与 private 效果相同);
  • max-age=xxx:缓存的内容将在 xxx 秒后过期(相对时间,秒为单位);
  • no-cache:需要使用协商缓存(后面介绍)来验证数据是否过期;
  • no-store:所有内容都不会缓存,强制缓存和协商缓存都不会触发。

Cache-Control 的值中最常用的为 max-age=xxx,缓存本身就是为了数据传输的优化和性能而存在的,所以 no-store 几乎不会使用。

注意:在 HTTP 1.0 版本中,Expires 字段的绝对时间是从服务器获取的,由于请求需要时间,所以浏览器的请求时间与服务器接收到请求所获取的时间是存在误差的,这也导致了缓存命中的误差,在 HTTP 1.1 版本中,因为 Cache-Control 的值 max-age=xxx 中的 xxx 是以秒为单位的相对时间,所以在浏览器接收到资源后开始倒计时,规避了 HTTP 1.0 中缓存命中存在误差的缺点,为了兼容低版本 HTTP 协议,正常开发中两种响应头会同时使用,HTTP 1.1 版本的实现优先级高于 HTTP 1.0。


3、通过 Network 查看强制缓存

我们通过 Chrome 浏览器的开发者工具,打开 NetWork 查看强制缓存的相关信息。

在这里插入图片描述

上面是百度网站 Logo 图片的响应,我们可以清楚的看到,其中兼容了 HTTP 1.0 和 HTTP 1.1 版本,并使用强制缓存存储了 10 年。

下面看一看通过缓存取出的数据在 Network 中与其他资源的区别。

在这里插入图片描述

其实缓存的储存是内存和磁盘两个位置,由当前浏览器本身的策略决定,比较随机,从内存的缓存中取出的数据会显示 (from memory cache),从磁盘的缓存中取出的数据会显示 (from disk cache)。


4、NodeJS 服务器实现强制缓存

// 强制缓存
const http = require("http");
const url = require("url");
const path = require("path");
const mime = require("mime");
const fs = require("fs");

const server = http.createServer((req, res) => {
    let { pathname } = url.parse(req.url, true);
    pathname = pathname !== "/" ? pathname : "/index.html";

    // 获取读取文件的绝对路径
    let p = path.join(__dirname, pathname);

    // 查看路径是否合法
    fs.access(p, err => {
        // 路径不合法则直接中断连接
        if (err) return res.end("Not Found");

        // 设置强制缓存
        res.setHeader("Expires", new Date(Date.now() + 30000).toGMTString());
        res.setHeader("Cache-Control", "max-age=30");

        // 设置文件类型并响应给浏览器
        res.setHeader("Content-Type", `${mime.getType(p)};charset=utf8`);
        fs.createReadStream(p).pipe(res);
    });
});

server.listen(3000, () => {
    console.log("server start 3000");
});

上面 mime 模块的 getType 方法可以成功返回传入路径下文件对应的文件类型,如 text/html 和 application/javascript 等,是第三方模块,使用之前需要安装。

npm install mime


协商缓存

1、协商缓存流程

协商缓存又叫对比缓存,设置协商缓存后,第一次访问服务器获取数据时,服务器会将数据和缓存标识一起返回给浏览器,客户端会将数据和标识存入缓存数据库中,下一次请求时,会先去缓存中取出缓存标识发送给服务器进行询问,当服务器数据更改时会更新标识,所以服务器拿到浏览器发来的标识进行对比,相同代表数据未更改,响应浏览器通知数据未更改,浏览器会去缓存中获取数据,如果标识不同,代表服务器更改过数据,所以会将新的数据和新的标识返回浏览器,浏览器会将新的数据和标识存入缓存中,协商缓存的流程如下。

在这里插入图片描述

协商缓存和强制缓存不同的是,协商缓存每次请求都需要跟服务器通信,而且命中缓存服务器返回状态码不再是 200,而是 304。


2、协商缓存判断标识

强制缓存是通过过期时间来控制是否访问服务器,而协商缓存每次都要与服务器交互对比缓存标识,同样的,对于协商缓存的实现在 HTTP 1.0 版本和 HTTP 1.1 版本也有所不同。

在 HTTP 1.0 版本中,服务器通过 Last-Modified 响应头来设置缓存标识,通常取请求数据的最后修改时间(绝对时间)作为值,而浏览器将接收到返回的数据和标识存入缓存,再次请求会自动发送 If-Modified-Since 请求头,值为之前返回的最后修改时间(标识),服务器取出 If-Modified-Since 的值与数据的上次修改时间对比,如果上次修改时间大于了 If-Modified-Since 的值,说明被修改过,则通过 Last-Modified 响应头返回新的最后修改时间和新的数据,否则未被修改,返回状态码 304 通知浏览器命中缓存。

在 HTTP 1.1 版本中,服务器通过 Etag 响应头来设置缓存标识(唯一标识,像一个指纹一样,生成规则由服务器来决定),浏览器接收到数据和唯一标识后存入缓存,下次请求时,通过 If-None-Match 请求头将唯一标识带给服务器,服务器取出唯一标识与之前的标识对比,不同,说明修改过,返回新标识和数据,相同,则返回状态码 304 通知浏览器命中缓存。

HTTP 协商缓存策略流程图如下:

在这里插入图片描述

注意:使用协商缓存时 HTTP 1.0 版本还是不太靠谱,假设一个文件增加了一个字符后又删除了,文件相当于没更改,但是最后修改时间变了,会被当作修改处理,本应该命中缓存,服务器却重新发送了数据,因此 HTTP 1.1 中使用的 Etag 唯一标识是根据文件内容或摘要生成的,保证了只要文件内容不变,则一定会命中缓存,为了兼容低版本 HTTP 协议,开发中两种响应头也会同时使用,同样 HTTP 1.1 版本的实现优先级高于 HTTP 1.0。


3、通过 Network 查看协商缓存

我们同样通过 Chrome 浏览器的开发者工具,打开 NetWork 查看协商缓存的相关信息。

再次请求服务器的请求头信息:

在这里插入图片描述

命中协商缓存的响应头信息:

在这里插入图片描述

下面看一看通过协商缓存取出的数据在 Network 中与第一次加载的区别。

第一次请求:

在这里插入图片描述

缓存后请求:

在这里插入图片描述

通过两图的对比,我们可以发现,协商缓存生效时的状态码为 304,并且报文大小和请求时间大大减少,原因是服务端在进行标识比对后只返回了 header 部分,通过状态码来通知浏览器使用缓存,不再需要将报文主体部分一起返回给浏览器。


4、NodeJS 服务器实现协商缓存

// 协商缓存
const http = require("http");
const url = require("url");
const path = require("path");
const mime = require("mime");
const fs = require("fs");0
const crytpo = require("crytpo");

const server = http.createServer((req, res) => {
    let { pathname } = url.parse(req.url, true);
    pathname = pathname !== "/" ? pathname : "/index.html";

    // 获取读取文件的绝对路径
    let p = path.join(__dirname, pathname);

    // 查看路径是否合法
    fs.stat(p, (err, statObj) => {
        // 路径不合法则直接中断连接
        if (err) return res.end("Not Found");

        let md5 = crypto.createHash("md5"); // 创建加密的转换流
        let rs = fs.createReadStream(p); // 创建可读流

        // 读取文件内容并加密
        rs.on("data", data => md5.update(data));

        rs.on("end", () => {
            let ctime = statObj.ctime.toGMTString(); // 获取文件最后修改时间
            let flag = md5.digest("hex"); // 获取加密后的唯一标识

            // 获取协商缓存的请求头
            let ifModifiedSince = req.headers["if-modified-since"];
            let ifNoneMatch = req.headers["if-none-match"];

            if (ifModifiedSince === ctime || ifNoneMatch === flag) {
                res.statusCode = 304;
                res.end();
            } else {
                // 设置协商缓存
                res.setHeader("Last-Modified", ctime);
                res.setHeader("Etag", flag);

                // 设置文件类型并响应给浏览器
                res.setHeader("Content-Type", `${mime.getType(p)};charset=utf8`);
                rs.pipe(res);
            }
        });
    });
});

server.listen(3000, () => {
    console.log("server start 3000");
});

在上面的代码中是通过可读流读取文件内容,并通过 crypto 模块进行了 md5 加密后的结果作为了唯一标识,这样就能保证只要文件内容不变,就会命中缓存,其中兼容了 HTTP 1.0 和 HTTP 1.1 两个版本,只要满足一个则直接返回 304 通知浏览器命中缓存。

注意:其实读取文件内容加密这种做法并不可取,假如读取的是大文件,在读取文件内容和进行 md5 加密这个过程会非常消耗时间,所以在开发中要针对业务的实际情况选择可以保证服务器性能的方式生成唯一标识,比如根据文件的摘要。


总结

为了使缓存策略更加健壮、灵活,HTTP 1.0 版本 和 HTTP 1.1 版本的缓存策略会同时使用,甚至强制缓存和协商缓存也会同时使用,对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接使用缓存,超出有效时间,执行协商缓存策略,对于协商缓存,将缓存信息中的 Etag 和 Last-Modified 通过请求头 If-None-Match 和 If-Modified-Since 发送给服务器,由服务器校验同时设置新的强制缓存,校验通过并返回 304 状态码时,浏览器直接使用缓存,如果协商缓存也未命中,则服务器重新设置协商缓存的标识。


使用缓存提高Node.js程序的性能 在本文中,我们介绍了如何在Node.js中使用内置的缓存模块,以及如何通过缓存优化数据库查询和处理数据的过期和更新。在查询数据之前,我们先尝试从缓存中获取数据,如果缓存中有数据,则直接返回;否则,我们从数据库中查询数据,并将查询结果存入缓存中。这样,在后续的查询中,如果相同的数据被请求,我们可以直接从缓存中获取,避免了对数据库的重复查询。在Node.js开发中,缓存是一种常用的技术,可以显著提高程序的性能和响应速度。在使用缓存时,我们需要注意缓存的清理和内存管理,以避免内存溢出和过多的占用系统资源。 阅读详情

相关推荐

apicache, 用于 express/node的简单API缓存中间件.zip

apicache, 用于 express/node的简单API缓存中间件 是一个简单的API响应缓存中间件,使用简单的英语持续。 支持Redis或者内置内存引擎,自动清除。 为什么?因为简单数据/响应的路由缓存也应该简单。安装npm install apicache

Nodejs 缓存

三类缓存: Expires Cache-control= !=0 apprccache 作用:指明当前资源的有效期;不发送任何请求,直接从缓存中取数据 last-modified/if-modified-since tag/if-none-match 发送请求确定是否新鲜,再决定是否返回304并从缓存中取数据 cache-control max-age=0/no-cache 直接发送请求,没有缓存 设置缓存超时时间 if (expires) { // 如果支持expires r

weixin_45520122的博客 2416

【2025最新】Multisim 14.3超详细安装步骤 【附安装包+永久+汉化】|Multisim 14.3

嗨,小伙伴们!是不是一直在找可靠的multisim下载安装教程?今天就给大家带来超详细的2025年Multisim 14.3安装全攻略!这款电路仿真神器绝对是学电子、做电路设计的必备工具!很多朋友后台留言说安装时各种报错、汉化失败,所以我决定出一期零基础、保姆级的教程,从下载到安装再到汉化,全部一步到位搞定!按照我的步骤来,包你顺利安装不出错!!!通过本教程,相信大家已经成功安装并配置好了Multisim 14.3。这款电路仿真神器能帮你设计和测试各种电路,从简单的LED闪烁到复杂的信号处理电路都不在话下。

pythonpapaxia的博客 8万+

window环境下安装Node并修改保存缓存的位置

我的电脑 >> 右击点击属性>> 高级环境配置>> 系统环境变量 >> 编辑添加node的地址即可。如一台电脑需要多个node环境 可使用nvm命令进行操作安装并且可以切换。使用npm get prefix 查看npm全局模块的存放路径。使用npm get cache 查看npm缓存默认存放路径。安装成功之后, 可在cmd 中输入是否安装成功,如下。设置全局模块的安装路径到node_global文件夹。设置缓存到node_cache文件夹。一般现在安装都会有自动添加环境变量。然后在控制面版中卸载node。

wlijun_0808的博客 2311

上下文理解的AI增强方案:AI应用架构师的架构洞察

本文将从AI应用架构师的视角,深入探讨“上下文理解”的技术本质、核心挑战,以及一套可落地的上下文增强架构方案。我们会拆解上下文理解的底层需求,分析架构设计中的关键决策,并通过具体案例展示如何构建一个能“记住过去、理解现在、预测未来”的AI系统。三个维度:上下文的内容范围(短期/中期/长期)、数据类型(文本/结构化/多模态)、技术挑战(窗口限制/信息过载/跨会话一致性);三种架构模式:分层上下文存储(热/冷数据分离)、上下文路由(按需筛选)、动态压缩(适配模型窗口);四个关键组件。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 220

3D Slicer中安装MedSAM插件

大家应该都读过这篇论文:《Segment Anything in Medical Images》这个插件便是该论文团队推出的在3D Slicer上使用的插件,可以分割医学图像的任何感兴趣区域。

m0_73719342的博客 2330

nodejs缓存策略

nodejs缓存策略

qq_42880714的博客 2630

CD-SSB和NCD-SSB相关内容

NR中,PSS/SSS 和PBCH总是绑定的,因此也称为SSB block。频域由下往上,第121个SC(k = 120)的中心频率,就是SSB的GSCN对应的SSREF(同步参考频率)的出处如上,同步栅格映射到SSB 的RE位置是10个PRB的位置,然后指向RE index 0,即第121个子载波的中心频率;UE获得N_offset_GSCN后,即可结合当前SSB的GSCN推算下一个SSB的GSCN =N_Reference_GSCN(当前SSB的GSCN) + N_offset_GSCN。

asd199086的博客 3430

HTTP的缓存机制的那些事儿

HTTP的缓存机制的那些事儿1.HTTP缓存概述2. 强缓存2. Expires3. cache-control3. 协商缓存1. Last-Modified 和 If-Modified-Since2. Etag 和 If-None-Match4. http缓存过程图 1.HTTP缓存概述 缓存的重要性不言而喻,通过网络请求资源缓慢并且降低了客户端的用户体验,增添了服务端的负担。很多短期之内不会经...

weixin_43678786的博客 346

2024.12.29 【RNA-seq】Rawdata数据缺失问题与解决方案

Fastq格式是一种用于存储高通量测序数据的文件格式,包含序列和相应的质量信息。第一行以开头,后接序列标识符;第二行是测序的DNA序列;第三行以开头,可能会跟随序列标识符;第四行是对应的质量值,以ASCII字符表示。Rawdata的数据完整性通常情况下是没有问题的,但我们仍然需要对下机数据进行验证,确保后续分析的正常进行,好的分析习惯可以提高整体的分析效率,避免很多不必要的麻烦。

1112

弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制

基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制1. 前言2. 顶帽变换(Top_hat)算法3. Matlab仿真4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵“弱"和“小’’两个方面:“弱’’是指目标在红外波长上所表现出来的强度,具体反映到所拍摄的红外图像上,就是指目标的灰度值;而“小’’是指目标的尺寸大小,也就是前面所述的成像面积很小,反映到红外图像上就是指目标所占的像素数目很少。 SPIE国际光学工程学会(Societyof Photo一0ptical Instrument

sinat_34897952的博客 5293

浅谈HTTP node缓存的那些事儿

前言 HTTP 缓存机制作为 Web 应用性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系的基础环节,也是想要成为前端架构的必备技能。 缓存的作用 我们为什么使用缓存,是因为缓存可以给我们的 Web 项目带来以下好处,以提高性能和用户体验。 加快了浏览器加载网页的速度; 减少了冗余的数据传输,节省网络流量和带宽; 减少服务器的负担,大大提高了网站的性能。 由于从本...

qq_38744335的博客 343

USB2.0协议解读

就写到这吧,其他协议层等属于软件需要了解的东西了。简单看了下,本文总结的有点乱,有两个原因吧,其一是理解的不够透彻,无法用简单明了的语言总结;其二是感觉这个协议文档章节划分的也不是很好,有点大杂烩。

qflook的博客 3673

一起聊一聊http缓存那些事儿

关于http缓存你了解什么? 作为前端攻城师,不管是在日常的开发还是性能优化中,对http的了解是很必要的,而http缓存就至关重要了。 提到http缓存,你也许第一反应就是304,没错,状态码 304 not modified,就是表示服务器允许访问资源,但因发生请求未满足条件的情况; 下面我们先来看一张图,注意看一下图中http报文中与缓存相关的首部字段: 我们先来回顾一下浏览器的h...

weixin_34269583的博客 123

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击​ 人工智能,计算机视觉,大模型,AI,在信息技术日新月异的当下,计算机视觉作为人工智能领域的关键分支,已经深度融入了我们生活与工作的各个层面。从安防监控系统里精准的人脸识别,助力维护公共安全;到工业生产线上高效的产品质量检测,保障产品品质;再到医疗影像分析中为疾病诊断提供有力支持,计算机视觉技术凭借其对视觉信息的强大处理与理解能力,不断推动着各行业的发展与变革。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Http协议那些事儿

来源于codesheep,稍微对其美化和排版。 {% note danger %} 01 HTTP 基本概念 {% endnote %} HTTP 是超文本传输协议,是超文本传输协议,也就是 H yperText T ransfer P rotocol。HTTP的名字「超文本协议传输」,它可以拆成三个部分: 超文本 传输 协议 说白了,HTTP 是一个在计算机...

Cryu_xuan的博客 1052

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HTTP那些事儿

1,为什么TCP链接需要三次握手,断开需要四次挥手? 客户端------------>服务端 : 服务端确定了客户端的发送能力 服务端------------>客户端:客户端确定了服务端的接受能力和发送能力 客户端------------>服务端:服务端确定了客户端的接收能力 总结:只有通过这三次握手,客户端才能确定服务端的接收和发送消息能力正常,服务端也能确...

u011433937的博客 172

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

nginx那点事儿——nginx代理缓存服务

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 nginx代理服务前言一. 代理缓冲服务器(HTTP协议转发)二. 代理缓冲服务器(TCP、UDP协议转发)三. 代理缓存服务器 前言 nginx除了做静态页面之后,运用最广泛的就是作为代理服务。 Nginx Proxy服务器: 正向代理:内网客户机通过代理访问互联网。通常要设置代理服务器地址和端口。 反向代理:外网用户通过代理访问内网服务器。用户无感知,内网服务器无感知。 一. 代理缓冲服务器(HTTP协议转发) ngx_http_p

liangpangpangyo的博客 2488

前端缓存那些事儿:你知道如何让它更高效吗?

🤍 前端开发工程师、技术日更博主、已过CET6🍨、23年度博客之星前端领域TOP1🕠高级专题作者、打造专栏🍚签约作者、上架课程💬 前些天发现了一个巨牛的,通俗易懂,风趣幽默,忍不住分享一下给大家。。

你若盛开,清风自来 2250

http、https和http2的那些事儿

https://segmentfault.com/a/1190000016136623 https://segmentfault.com/a/1190000012975173 https://segmentfault.com/a/1190000005085636 https://segmentfault.com/a/1190000007219256 https://segmentfault.com...

weixin_43678786的博客 1600

关于缓存的那些风流事儿

最近大家针对preload、HTTP/2 push和ServiceWorker的浏览器缓存实现展开了激烈的讨论,而这也引起了很多人的疑惑。鉴于此,本文将通过故事来让大家了解一个请求如何完成他的使命并找到匹配的缓存资源。了解详情:关于缓存的那些风流事儿 了解更多前沿技术资讯,获取深度技术文章推荐,请关注优快云研发频道微博。 欢迎加入“优快云前端开发者”群,与更多专家、技术同行进行热点、...

u012996572的博客 145

关于HTTP和HTTPS的那些事儿 (最全总结)

关于HTTP和HTTPS的那些事儿 (最全总结) 一、 http/https区别: 1.https需要到CA申请证书,收费的,具有安全性的ssl加密传输协议, 端口: 443, 由ssl+http协议构建 可进行加密传输,身份认证 解决的问题: 1)信任主机问题:采用https的server必须要从CA申请一个用于证明服务器用途类型的证书,这个证书只有勇于对应的sercer的时候 客户端才能信任该主机 2)防止通讯过程中数据的泄密和被篡改 2.传输协议 HTTP : 超文本传输协议, 明文传输 不安全。无状

记录日常 651

聊聊缓存那些事儿

我们再次请求数据,客户端应用程序首先尝试从浏览器缓存中检索数据。🔹 4. 消息传递基础设施:消息代理首先将消息存储在磁盘上,然后消费者按照自己的节奏检索消息。根据保留策略,数据会在Kafka集群中缓存一段时间。🔹 5. 服务:一个服务中有多层缓存。如果数据没有缓存在CPU缓存中,服务将尝试从内存中检索数据。🔹 7. 全文搜索:我们有时需要使用全文搜索,比如Elastic Search来进行文档搜索或日志搜索。🔹 6.分布式缓存:像Redis这样的分布式缓存在内存中保存多个服务的键值对。

南山男的忧伤的博客 438

前端与HTTP那些事儿

各版本的http 发展 在HTTP建立之初,主要是为了传输超文本标记语言(HTML)文档。随着时代的发展,也进行了若干次演进。下图是各个版本发布的时间轴。 目前为止,使用最为广泛的是http1.1,http1.0应该比较少了,最新的是http2。 这篇博文也主要,围绕着1.0、1.1、2.0三个版本进行介绍。 http/1.0 http1.0不会复用tcp链接,每次请求都会打开、断开一条链接。 ...

qianduan6666666的博客 3039
上一篇: NodeJS 加密 —— crypto 模块
下一篇: 命令行工具 —— 手写类似 http-server 的静态服务器
Panda Shen
博客等级 码龄10年 18粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值