71 # 协商缓存的配置:通过内容

这篇具有很好参考价值的文章主要介绍了71 # 协商缓存的配置:通过内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对比(协商)缓存

比较一下再去决定是用缓存还是重新获取数据,这样会减少网络请求,提高性能。

对比缓存的工作原理

客户端第一次请求服务器的时候,服务器会把数据进行缓存,同时会生成一个缓存标识符,这个缓存标识符会被发送到客户端,客户端第二次请求服务器的时候,会把缓存标识符发送到服务器,服务器会根据缓存标识符进行判断,如果缓存标识符相同,则服务器会判断缓存是否过期,如果没有过期,则服务器会返回 304,告诉客户端使用缓存,如果缓存标识符不同,则服务器会返回 200,同时返回新的数据。

上一节使用了修改时间的方式,这一节用内容来处理

使用 md5 摘要算法:不是加密算法(不可逆)

  • 不可逆
  • 不同内容转化的结果不相同
  • 转化后的结果都是一样长的
  • 同样的东西产生的结果肯定是相同的
  • 雪崩效应,一点不同翻天覆地不同

使用的库是 crypto 这个库

const crypto = require('crypto');
console.log(crypto.createHash('md5').update('kaimo313').digest('base64'));
// rFDqro5Lox3vFXr5fA4r7Q==
  • 客户端:if-none-match
  • 服务端:ETag 当前文件唯一标识

ETag + if-none-match 可以实现对比缓存,比较的方式比较精准,缺点是文件很大性能就很差,但是默认我们不会完整内容生成 hash 戳,可以取文件的某一部分,为了保证精确度,可采用内容的一部分加上文件的总大小来生成 hash 戳,这样性能会好很多。

新建 cache.js

const http = require("http");
const fs = require("fs");
const path = require("path");
const url = require("url");

const crypto = require("crypto");

const server = http.createServer((req, res) => {
    const { pathname } = url.parse(req.url);
    const filePath = path.join(__dirname, pathname);
    console.log(req.headers);
    res.setHeader("Cache-Control", "no-cache");
    // 拿到客户端传过来的 if-none-match 文件标识
    let ifNoneMatch = req.headers["if-none-match"];

    fs.stat(filePath, (err, statObj) => {
        if (err) return res.end();
        // 进行文件摘要产生hash
        let contentHash = crypto.createHash("md5").update(fs.readFileSync(filePath)).digest("base64");
        if (ifNoneMatch === contentHash) {
            res.statusCode = 304;
            return res.end();
        }
        res.setHeader("ETag", contentHash);
        // 第一请求,需要根据内容生成一个唯一的标识:可以对应当前的文件
        if (err) return (res.statusCode = 404), res.end("Not Found");
        // 判断是否是文件
        if (statObj.isFile()) {
            fs.createReadStream(filePath).pipe(res);
        } else {
            res.statusCode = 404;
            res.end("Not Found");
        }
    });
});
server.listen(5000);

然后新建 public 文件夹,里面添加 index.htmlstyle.css

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>凯小默测试对比缓存:通过内容</title>
</head>

<body>
    <link rel="stylesheet" href="/public/style.css">
</body>

</html>
body {
    background-color: seagreen;
}

我们启动服务,访问 http://127.0.0.1:5000/public/index.html,可以看到第二次请求的资源变成了 304

nodemon cache.js

71 # 协商缓存的配置:通过内容,Node / Node 框架,前端工程架构,缓存,对比缓存,协商缓存

71 # 协商缓存的配置:通过内容,Node / Node 框架,前端工程架构,缓存,对比缓存,协商缓存

71 # 协商缓存的配置:通过内容,Node / Node 框架,前端工程架构,缓存,对比缓存,协商缓存文章来源地址https://www.toymoban.com/news/detail-669552.html

到了这里,关于71 # 协商缓存的配置:通过内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • http缓存?强制缓存和协商缓存?

    HTTP缓存是一种优化网络资源加载速度的技术,通过减少从服务器获取相同资源的次数来实现。HTTP缓存机制包括强制缓存和协商缓存(对比缓存)两种类型。 强制缓存 强制缓存是指浏览器在接收到服务器返回的响应后,会将响应内容和相关缓存信息(如Expires和Cache-Control)保

    2024年02月22日
    浏览(41)
  • 浏览器缓存(强缓存、协商缓存)

    这一点主要解析浏览器缓存以及缓存机制的详细过程。 与缓存相关的状态码: 200 ok    从浏览器下载的最新资源 200 (from memory cache)    不进行http请求,直接从浏览器内存中读取的资源,页面关闭,则资源释放,一般一些脚本、图片、文字等会存在内存中 200 (from disk cache) 

    2024年04月17日
    浏览(49)
  • 强缓存和协商缓存

    强缓存和协商缓存 缓存分为强缓存和协商缓存。强缓存不过服务器,协商缓存需要过服务器,协商缓存返回的状态码是304。两类缓存机制可以同时存在,强缓存的优先级高于协商缓存。当执行强缓存时,如若缓存命中,则直接使用缓存数据库中的数据,不再进行缓存协商。

    2024年02月07日
    浏览(35)
  • 强缓存与协商缓存

    为了减少资源请求次数,加快资源访问速度,浏览器对资源文件如图片、css文件、js文件等有一个缓存功能。而浏览器缓存策略又分为强缓存和协商缓存 所谓强缓存可以理解为强制缓存的意思,即浏览器在访问某个资源时会判断是否使用本地缓存理已经存在的资源文件,使用

    2024年02月07日
    浏览(43)
  • 前端接口请求支持内容缓存和过期时间

    支持用户自定义缓存时间,在规则时间内读取缓存内容,超出时间后重新请求接口 首先封装一下 axios,这一步可做可不做。但是在实际开发场景中都会对 axios 做二次封装,我们在二次封装的 axios 基础上继续封装,增加支持缓存功能 request.js 新建 catchAjax.js ,当我们想用接口

    2024年02月06日
    浏览(37)
  • HTTP 缓存机制——强制缓存和协商缓存

    对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都缓存在本地,那么下次就直接读取本地的数据,不必在通过网络获取服务器的响应了 HTTP 缓存有两种实现方式,分别是强制缓存和协商缓存。 强缓存指的是只要浏览

    2024年01月25日
    浏览(44)
  • HTTP的缓存策略-强制缓存与协商缓存

    Definition:HTTP的缓存策略指的是控制浏览器或代理服务器缓存哪些资源、以及如何使用和存储这些资源的规则。 常用的HTTP缓存策略包括:强制缓存、协商缓存、禁止缓存、条件缓存等策略。 本文只介绍其中最为常用的强制缓存与协商缓存。 Introduction:浏览器在访问资源之前

    2024年02月12日
    浏览(170)
  • 对强缓存和协商缓存的理解

    浏览器缓存的定义: 浏览器缓存是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。 浏览器缓存分为强缓存和协商缓存。 浏览器是如何使用缓存的: 浏览器缓存的过程 1.浏览器第一次加载资源,服

    2024年02月13日
    浏览(44)
  • 浏览器强缓存与协商缓存

    强制缓存的思想是,在浏览器内置数据库中缓存每次请求中 “可以被缓存” (受到一些的管控)的静态资源如 image, css, js 文件, 当第二次请求被缓存过的资源时候,会通过校验两个字段 Expires 和 Cache-Control 的max-age字段(注意,Expires 是 http1.0 的产物, Cache-Control 则是

    2023年04月19日
    浏览(40)
  • 什么是强缓存和协商缓存

    强缓存是指浏览器在请求资源时,先检查本地缓存是否存在该资源的副本,并且该副本是否有效。如果有效,浏览器直接从本地缓存中获取资源,不会发送请求到服务器。 使用强缓存策略时,如果缓存资源有效,则直接使用缓存资源,不必在向服务器发起请求。 常见的强缓

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包