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();// 進行文件摘要產生hashlet 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

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41318.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Transformer是什么,Transformer應用

目錄 Transformer應用 Transformer是什么 Transformer應用:循環神經網絡 語言翻譯:注重語句前后順序 RNN看中單個特征; CNN:看中特征之間時序性 模型關注不同位置的能力 Transformer是什么 Transformer是一個利用注意力機制來提高模型訓練速度的模型。關于注意力機…

clickhouse-數據導入導出方案

一、簡介 clickhouse有多種數據的導入導出方式&#xff0c;可以靈活使用&#xff0c;下面對這些方式分別做些介紹&#xff0c;導入導出的寫法與格式和格式設置有關。 二、導入 1.從s3導入 詳情可查看官網&#xff0c;也可以在這里獲取數據集 -- 建庫建表 CREATE DATABASE …

whisper語音識別部署及WER評價

1.whisper部署 詳細過程可以參照&#xff1a;&#x1f3e0; 創建項目文件夾 mkdir whisper cd whisper conda創建虛擬環境 conda create -n py310 python3.10 -c conda-forge -y 安裝pytorch pip install --pre torch torchvision torchaudio --extra-index-url 下載whisper p…

智慧工地云平臺源碼——塔機監控系統

智慧工地概念 智慧工地是一種嶄新的工程全生命周期管理理念&#xff0c;是指運用信息化手段&#xff0c;通過對工程項目進行精確設計和施工模擬&#xff0c;圍繞施工過程管理&#xff0c;建立互聯協同、智能生產、科學管理的施工項目信息化生態圈&#xff0c;并將此數據在虛擬…

鴿王-稚暉君,“遠征”A1啟程

看到這篇文章的人&#xff0c;想必對野生鋼鐵俠-稚暉君&#xff0c;都有所了解。作為華為的天才少年&#xff0c;獲得了很多的榮譽&#xff0c;作為B站有名的鴿王&#xff0c;在沉浮一段時間后終于要帶著新的東西和大家見面了。動態-嗶哩嗶哩https://b23.tv/Jv7tIjg 眾所周知&a…

網絡通信原理TCP字段解析(第四十七課)

字段含義Source Port(源端口號)源端口,標識哪

vueuse常用方法

useDateFormat 時間格式化 <script setup lang"ts">import { useNow, useDateFormat } from vueuse/coreconst formatted useDateFormat(useNow(), YYYY-MM-DD HH:mm:ss)</script><template><div>{{ formatted }}</div> </templa…

el-input添加自定義指令只允許輸入中文/英文/數字,兼容輸入法事件

省流 script: directives: {regexp: {inserted: (el, binding, vnode) > {let composition falseconst formatValue function (e) {if (composition) return// vnode.componentInstance組件實例vnode.componentInstance.$emit(input, e.target.value.replace(/[^\u4e00-…

Python學習筆記_基礎篇(十二)_nmap使用及案例

nmap概念及功能 概念 NMap&#xff0c;也就是Network Mapper&#xff0c;最早是Linux下的網絡掃描和嗅探工具包。 nmap是一個網絡連接端掃描軟件&#xff0c;用來掃描網上電腦開放的網絡連接端。確定哪些服務運行在哪些連接端&#xff0c;并且推斷計算機運行哪個操作系統&am…

ChatGPT在智能音樂推薦和個性化播放列表中的應用如何?

智能音樂推薦和個性化播放列表是音樂流媒體領域中的重要應用&#xff0c;可以幫助用戶發現新音樂、定制自己的音樂體驗&#xff0c;并提升音樂平臺的用戶滿意度。ChatGPT作為一種先進的自然語言處理模型&#xff0c;可以在智能音樂推薦和個性化播放列表領域發揮重要作用。本文將…

神經網絡基礎-神經網絡補充概念-56-遷移學習

遷移學習&#xff08;Transfer Learning&#xff09;是一種機器學習技術&#xff0c;旨在將在一個任務上學到的知識或模型遷移到另一個相關任務上&#xff0c;以提高新任務的性能。遷移學習的核心思想是通過利用源領域&#xff08;source domain&#xff09;的知識來改善目標領…

微信小程序全局事件訂閱eventBus

微信小程序全局事件訂閱 在Vue開發中&#xff0c;我們可能用過eventBus來解決全局范圍內的事件訂閱及觸發邏輯&#xff0c;在微信小程序的開發中我們可能也也會遇到同樣的需求&#xff0c;那么我們嘗試下在小程序&#xff08;原生小程序開發&#xff09;中實現類似eventBus的事…

大模型技術實踐(一)|ChatGLM2-6B基于UCloud UK8S的創新應用

近半年來&#xff0c;通過對多款主流大語言模型進行了調研&#xff0c;我們針對其訓練方法和模型特點進行逐一分析&#xff0c;方便大家更加深入了解和使用大模型。本文將重點分享ChatGLM2-6B基于UCloud云平臺的UK8S實踐應用。 01各模型結構及特點 自從2017年6月谷歌推出Transf…

FlexTools plugin and 3dWindow plugin for SketchUp Crack

FlexTools v2.3.6 plugin for SketchUp 3dWindow v.4.5 plugin for SketchUp 建筑師和3D藝術家使用FlexTools創建SketchUp門、窗、樓梯和其他建筑元素&#xff0c;具有卓越的速度和控制水平。 SketchUp功能強大但易于使用的擴展。對于在施工圖或建筑圖中使用SketchUp的每個人…

數學建模:論文排版技巧及圖表公式規范制作

Excel 論文樣式提前設置利用題注和表注能夠自動排序mac m1 mathtype沒有永久版&#xff0c;淘寶價格比官網低 編輯公式注意事項&#xff1a; 1、公式居中&#xff0c;標號為英文狀態輸入并右對齊。 2、中英文狀態下&#xff0c;對應字母的狀態不同&#xff0c;請合理選擇。 3、…

034_小馳私房菜_[問題復盤] Qcom平臺,某些三方相機拍照旋轉90度

全網最具價值的Android Camera開發學習系列資料~ 作者:8年Android Camera開發,從Camera app一直做到Hal和驅動~ 歡迎訂閱,相信能擴展你的知識面,提升個人能力~ 【一、問題】 某些三方相機,預覽正常,拍照旋轉90度 【二、問題排查】 1 ) HAL這邊Jpeg編碼數據在哪個地方…

C# 隨機法求解線性規劃問題 蒙特卡洛

線性規劃問題: max3x12x2 x12x2<5 2x1x2<4 4x13x2<9 x1>0 x2>0 正確的結果:x11.5; x21, max z6.5 Random random1 new Random(DateTime.Now.Millisecond);Random random2 new Random(DateTime.Now.Millisecond*DateTime.Now.Millisecond);double max-9999,x1…

Pycharm與Anaconda Python的開發環境搭建

目錄 一&#xff1a;下載 二&#xff1a;安裝python 三&#xff1a;設置Pycharm 一&#xff1a;下載 下載Anaconda&#xff1a; Anaconda | The World’s Most Popular Data Science Platform 安裝好以后&#xff0c;設置一下環境變量&#xff1a; 打開命令行&#xff0c…

UI界面設置

文章目錄 1. 修改 share.html 內容如下&#xff1a;2. 修改 html 文件格式為 utf-83.保存&#xff0c;運行程序4. 訪問頁面 1. 修改 share.html 內容如下&#xff1a; <!DOCTYPE html><html> <head><meta charset"utf-8"><title>1v1屏…

uniapp 官方擴展組件 uni-combox 實現:只能選擇不能手寫(輸入中支持過濾顯示下拉列表)

uniapp 官方擴展組件 uni-combox 實現&#xff1a;只能選擇不能手寫&#xff08;輸入中支持過濾顯示下拉列表&#xff09; uni-comboxuni-combox 原本支持&#xff1a;問題&#xff1a; 改造源碼參考資料 uni-combox uni-combox 原本支持&#xff1a; 下拉選擇。輸入關鍵字&am…