缓存头 Cache-Control 的含义和使用

(HTML) 与cache-control相关的客户端-服务器缓存机制 (HTML) 与cache-control相关的客户端-服务器缓存机制1.cache-control2.客户端-服务器3.客户端-服务器的缓存机制4.安全性相关 这是一篇面对HTML初学者的文章,旨在帮助新手对客户端-服务器之间的缓存机制有一定的了解,以便于学习相关内容。 首先,我们要清楚cache-control和客户端-服务器的基本概念 1.cache-control cache-contro... 阅读详情

本篇我们来写一下HTTP 中的缓存,即Cache-Control 。

Cache-Control 的可缓存性(指明哪些地方可以缓存返回的数据):

  - public (HTTP 返回的时候在Heaher 中设置Cache-Control 的值为‘public’。它代表,这个HTTP 请求它返回的内容所经过的任何路径中,包括中间的一些HTTP 代理服务器以及发出请求的客户端浏览器,都可以进行对返回内容的缓存操作)

  - private (发起请求的浏览器才能使用返回数据的缓存)

  - no-cache (可以在本地或者proxy服务器进行缓存,每次发起请求都要去服务器验证,服务器返回可以使用缓存,才可以真正使用本地缓存,任何节点都不能直接使用缓存)

到期(缓存的有效期)

max-age=<seconds> (最常用)

s-maxage=<seconds>(只有在代理服务器才会生效,且代理服务器会优先使用s-maxage)

max-stale=<seconds> (它是发起请求方,主动去带着的header;在max-age过期后,但还在max-stale的有效期内,还可以使用过期的缓存,不需要去原服务器请求新的内容)

重新验证(不常用)

must-revalidate (它的意思是:当我们设置了 max-age ,过期后,我们必须去原服务端发送请求,重新获取数据,验证是否缓存过期,而不能直接去使用本地的缓存)

proxy-revalidate (与must-revalidate 相似,proxy-revalidate 是用在缓存服务器中,如果缓存服务器中的数据过期的话,需要去原服务器发送请求...)

其他

no-store (浏览器或者proxy服务器都不能存返回数据的缓存,永远都需要去服务器请求新的数据)

no-transform (主要用在proxy服务器,表示不要去随意改动返回的内容,比如压缩什么的)

下面我们来试一试max-age,如下。

先是 server.js 代码 

const http = require('http')
const fs = require('fs')

http.createServer(function (request, response) {
    console.log('request come', request.url)

    const html = fs.readFileSync('test.html', 'utf8')
    response.writeHead(200, {
        'Content-Type': 'text/html'
    })
    response.end(html)
}).listen(8888)

console.log('serve listening on 8888')

然后test.html 代码如下

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>MyHtml</title>
</head>
<body>
    <div>hello world</div>
    <div>don't speak</div>
    <script src="/script.js"></script>
</body>
</html>

然后,启动服务。在浏览器输入URL localhost:8888 就可以访问,如下。

有了上面的基础后,我们给/script.js 请求添加max-age 为20s 如下。

const http = require('http')
const fs = require('fs')

http.createServer(function (request, response) {
    console.log('request come', request.url)

    if (request.url === '/') {
        const html = fs.readFileSync('testMaxAge.html', 'utf8')
        response.writeHead(200, {
            'Content-Type': 'text/html'
        })
        response.end(html)
    }

    if (request.url === '/script.js') {
        response.writeHead(200, {
            'Content-Type': 'text/javascript',
            'Cache-Control': 'max-age=20'
        })
        response.end('console.log("script loaded")')
    }
}).listen(8888)

console.log('serve listening on 8888')

下面,我们重启服务后,刷新页面,第二次刷新(间隔小于20s)时,会发现/script.js 是从缓存中读的。如下。

但是,有一个问题 catch-control 是客户端缓存,当max-age 之内,服务端更新了数据,客户端是不能知道的。

这个问题,前端的一种常用的解决方案是,将打包的js文件名加入一段哈希码,当打包内容不变时,哈希码就不变。这样子,当内容不变时,请求的url 也就不变,当内容变了请求的url 也变了。这样就达到了更新缓存的目的。

最后,catch-control 有很多值,之间使用逗号分割即可,如下。

const http = require('http')
const fs = require('fs')

http.createServer(function (request, response) {
    console.log('request come', request.url)

    if (request.url === '/') {
        const html = fs.readFileSync('testMaxAge.html', 'utf8')
        response.writeHead(200, {
            'Content-Type': 'text/html'
        })
        response.end(html)
    }

    if (request.url === '/script.js') {
        response.writeHead(200, {
            'Content-Type': 'text/javascript',
            'Cache-Control': 'max-age=20, public'
        })
        response.end('console.log("script loaded")')
    }
}).listen(8888)

console.log('serve listening on 8888')

Done.

如何在 JavaScript 中使用 Cache-Control 头来控制缓存? 需要注意的是,这只影响浏览器的行为,不影响服务器的行为。如果你想控制服务器的缓存行为,你需要在服务器端设置 Cache-Control 头。如果你想控制服务器的缓存行为,你需要在服务器端设置 Cache-Control 头。在这个例子中,Cache-Control: no-cache 指示浏览器不使用缓存的响应,而是向服务器发送请求以验证响应的新鲜度。在这个例子中,Cache-Control: no-cache 指示浏览器不使用缓存的响应,而是向服务器发送请求以验证响应的新鲜度。 阅读详情

相关推荐

HTTP协议:页面缓存之Cache-Control 和 Etag

Cache-Control是HTTP协议的一部分,是在请求和响应中必须服从的指令,通常用于提高页面加载,阻止页面缓存对请求和响应造成不利的干扰。 Cache-Control 为单向指令,即请求中存在的指令,并不意味着响应中存在同样的指令 一、请求 1. Cache-Control RFC:7234#5.2.1 Request Cache-Control Directives ...

spawpaw的博客 1312

缓存Cache-Control

缓存

m0_71902265的博客 5849

Cache-Control

可以看到上图中。max-age的为3600秒,也就是我们在Nginx设置的一个小时。这样浏览器就会根据用户本地时间来计算一个小时后,再让缓过期。 还有一个小细节,不知道你之前是否注意到。浏览器和Web服务器之间协商的时间都是GMT时间,而我们中国实用的时间是GMT+8的时区,所以我们看到的时候比实际上少了8个小时,但是这丝毫不影响他们之间的协商。 Cache-control除了max-age...

zhaoyangjian724的专栏 962

http协议(三)缓存头Cache-Control和缓存验证ETag、Last-Modified

Cache-Control 通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中。 Cache-Control指令包含了多个指令,分别具有不同的用途,比如设置缓存权限和缓存时间。 指令格式具有以下有效规则: 不区分大小写,但建议使用小写。 多个指令以逗号分隔。 具有可选参数,可以用令牌或者带引号的字符串语法。 1. 指令 1.1 可缓存性 public 表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等

Niall_Tonshall的博客 6587

电商产品组合策略:引流品与利润品的实战方法论

在电商运营中,产品组合策略是提升流量转化与利润增长的核心技术。其基本原理是通过数据化选品构建产品矩阵,利用引流品吸引用户流量,再通过利润品实现商业变现。这种策略不仅能优化广告投放的ROAS(广告投入产出比),还能显著提升客单价。技术实现上需要结合Google Analytics等工具进行归因分析,并运用动态库存管理模型控制风险。该方案特别适用于Amazon、Shopify等电商平台,能有效解决跨境电商业内流量获取与利润创造的平衡难题。通过实战案例可见,合理的产品组合可使客单价提升30-50%,是电商运营必备

weixin_42522009的博客 350

基于多物理参数数据融合和先进人工智能算法的锂电池热失控监测传感器

基于多物理参数数据融合和先进人工智能算法的锂电池热失控监测传感器是多种方案中的优选项!是一种快速、准确、可靠、应用广泛的传感方案!可有效监测锂离子电池热失控风险,保障化学能储能电站安全!

chicheng_danxin的博客 2412

缓存头Cache-Control的含义和使用

Cache-Control 的含义 可缓存性 public,http 请求返回的过程当中,在 cache-control 中设置这个值,代表 http 请求返回的内容所经过的任何路径当中(包括中间一些http代理服务器以及发出请求的客户端浏览器),都可以对返回内容进行缓存操作。 private,代表只有发起请求的浏览器才可以进行缓存 no-cache,可以在本地进行缓存,但每次发请求时,都要向服务...

littlebirdflying的博客 8520

百度慧眼人口位置数据:从原理到实战的GIS处理全流程

本文详细解析百度慧眼人口位置数据的处理全流程,从基本原理到实战应用。通过空间网格划分、终端数量统计等技术手段,百度慧眼数据能准确反映人群分布特征。文章涵盖坐标系转换、核密度分析、热力图制作等GIS处理技巧,并分享商业选址、城市规划等典型业务场景的解决方案,帮助读者高效利用这一数据资源。

weixin_30872157的博客 534

缓存头Cache-Control 的含义和使用

缓存头Cache-Control 的含义和使用 用来表示浏览器 是否 可以 进行 缓存,或缓存 进行一些限制 (1).public: 表示任何地方 都可以进行缓存 (2).private: 表示 只允许 发起 请求 的浏览器 才可以 进行 缓存 (3).no-cache: 任何 地方 都不允许 缓存(可以进行缓存,但是每次都需要向服务器请求验证 ,缓存是否可用) (4). max-age...

qq_41709082的博客 550

告别unittest!用Pytest+Fixture重构你的Python测试代码(附实战案例)

本文详细介绍了如何从unittest迁移到Pytest框架,重点解析了Pytest的Fixture机制如何提升测试效率和代码简洁性。通过实战案例展示了Pytest在减少代码量、提升调试效率和资源管理方面的优势,帮助开发者重构Python测试代码。

weixin_26749245的博客 206

QGroundControl高级配置与自定义功能实战指南

本文深入探讨了QGroundControl(QGC)的高级配置与自定义功能,为无人机开发者、系统集成商和高级用户提供实战指南。内容涵盖从品牌界面定制、自定义MAVLink消息处理,到插件开发与自动化部署的全流程,旨在帮助用户解锁QGC的隐藏潜力,打造专属的行业解决方案。

weixin_29234509的博客 239

HTTP(V)—— 缓存头Cache-Control的含义和使用

一、Cache-Control的可缓存性 public:在HTTP请求返回的内容经过的所有路径中,都可以对返回内容进行一个缓存的操作。 private:只有发起请求的浏览器才可以进行缓存 no-cache:可以在本地进行缓存,但是每次发起请求都需要到服务器去验证一下,如果服务器返回告诉你可以使用本地缓存,你才可以去使用本地的缓存。 二、Cache-Control到期(混村什么时间到期) m...

zhanghuali 1980

描述符链表(Descriptor Chain)是什么?

描述符链表是硬件加速数据传输的核心数据结构,通过链式描述符(包含地址、长度、控制标志等)实现DMA自动批量处理,显著降低CPU负载。其工作原理为:CPU初始化链表后,硬件按序处理每个描述符,完成自动跳转与中断通知。在网卡收包、NVMe存储等场景中应用广泛,优势包括批处理、低延迟和灵活调度。需注意内存对齐、缓存一致性等实现细节,优化手段包括预分配描述符池、环形缓冲区等。该技术是网络/存储领域提升吞吐量的关键方案。

guigenyi的专栏 777

java清除浏览器缓存

方法一: <%response.setHeader("Pragma","No-cache"); response.addHeader( "Cache-Control", "must-revalidate" ); response.addHeader( "Cache-Control", "no-cache" ); response.addHeader( "Cache-Control", "no-store" ); response.setDateHeader("Expires", 0)...

u013938578的博客 6113

三分钟解决RKNN-Toolkit2安装失败:从模块报错到成功验证的完整记录

本文详细记录了RKNN-Toolkit2安装失败的解决方案,从环境配置到模型转换实战,特别针对常见的'No module named 'rknn''报错提供了完整修复指南。通过YOLOv8模型转换示例,展示了从ONNX到RKNN格式的完整流程,并分享了在RK3588芯片上的部署优化技巧。

html8的博客 264

飞牛fnNAS搭建Web网页版OFFICE(WPS)软件

本文介绍了如何在飞牛NAS上通过Docker容器部署WPS Office办公软件。主要内容包括:启用Docker服务、准备项目文件夹结构、使用Compose方式构建容器、解决端口冲突问题、配置中文输入法和字体库,以及通过ZeroTier实现远程访问。文章详细说明了每个步骤的操作方法,包括容器启动、输入法设置、字体添加和文件存储位置配置。最后还介绍了使用ZeroTier内网穿透技术实现远程访问NAS上WPS服务的方法,让用户可以在不同设备上随时编辑NAS中的文件。整个部署过程完整清晰,为NAS用户提供了便捷的

dgnankai的专栏 1701

Nginx浏览器缓存篇

环境: CentOS7 Nginx 1.16.0 Expires 原理: 给http添加Cache-Control、Expires头 Syntax: expires [modified] time; expires epoch | max |off ; Default: expires off; Context: http, server, location; expires指令控...

yicixin's blog 1589

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

缓存

https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=zh-cn#etag- http://my.oschina.net/leejun2005/blog/369148 浏览器缓存基本认知 分为两种: 强缓存和协商缓存

ztzt15的专栏 338

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

缓存头Cache-Control的含义与使用

缓存头是指:response的返回结果可被中间经过的各代理服务器以及请求浏览器缓存 缓存的意义是我不需要每次都到业务服务器去请求数据,只需要在中间缓存中获取即可,提升了获取数据效率及响应速度,当然数据变化频率很快的场景并不适合开启Cache-Control。 可缓存参数:public 、private 、no-cache public : 可被中间经过的各代理服务器以及请求浏览器缓存 privat...

wangqiang9x的博客 1668

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

缓存控制头字段详解:Cache-Control、Expires等实战(含案例分析)

本文介绍了HTTP缓存机制中的关键头字段Cache-Control和Expires,及其在Web性能优化中的作用。详细解析了Cache-Control的public、private、no-cache、no-store和max-age等指令的用法,以及Expires字段的绝对时间设置。通过Spring Boot项目示例,展示了如何在控制器中设置这些头字段,包括静态资源的长期缓存和动态接口的无缓存配置。最后强调了设置时需注意HTTP版本兼容性和避免指令冲突,以确保缓存策略正确实施。

fykam的博客 1603

Cache-Control 的含义

Cache-Control 的含义 可缓存性 public,http 请求返回的过程当中,在 cache-control 中设置这个值,代表 http 请求返回的内容所经过的任何路径当中(包括中间一些http代理服务器以及发出请求的客户端浏览器),都可以对返回内容进行缓存操作。 private,代表只有发起请求的浏览器才可以进行缓存 no-cache,可以在本地进行缓存,但每次发请求时,都要向服务器进行验证,如果服务器允许,才能使用本地缓存。 到期 max-age=,缓存多少秒后过期,过期之后浏览器才

shiyidemingzij的博客 2058

Undici缓存策略:Cache-Control与Vary头详解

掌握HTTP缓存机制是提升应用性能的关键!🚀 Undici作为Node.js的高性能HTTP客户端,提供了强大的缓存拦截器功能,让开发者能够轻松实现智能缓存管理。本文将深入解析Undici中Cache-Control与Vary头的实现原理,帮助你构建更高效的网络应用。 ## 🔍 Undici缓存拦截器核心架构 Undici的缓存系统位于[lib/interceptor/cache.js](

gitblog_00164的博客 925

关于HTTP缓存Cache-Control

关于Cache-Control的特性 可缓存性 代表http请求返回的内容所经过的任何路径中, 包括中间的http代理服务器, 以及发出请求的客户端浏览器 都可以对返回内容进行缓存的操作,也就是把这份数据存在本地,下一次可以直接读取而非重新获取 网络中有很多代理服务器和发起的客户端都可以进行缓存的操作,它的可缓存性就是指那些地方可以执行缓存操作 public:表示任何地方都可以进行缓存 private:表示发起请求的浏览器才可以进行缓存 no-cache:不表示不缓存,实际上,在每次请求中使用任何缓存响应

Wang的专栏 3030
上一篇: CORS 跨域请求 - 2
下一篇: 缓存验证 Last-Modified & Etag
purple_lumpy
博客等级 码龄10年 73粉丝 340原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值