Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >response headers添加Cache-Control 和request headers添加Cache-Control 到底有啥区别

response headers添加Cache-Control 和request headers添加Cache-Control 到底有啥区别

作者头像
用户7413032
发布于 2020-06-11 08:14:55
发布于 2020-06-11 08:14:55
5K00
代码可运行
举报
文章被收录于专栏:佛曰不可说丶佛曰不可说丶
运行总次数:0
代码可运行

前言

缓存是一个复合的概念,本文是http缓存系列文章之一,仅讨论Cache-Control这个字段的两个值:no-cache和max-age=0的区别。关于Cache-Control更全面的介绍,请点击这里。

本文实验代码的运行方式,参考这里。特别要注意:刷新触发不了Cache-Control(原因),要查看Cache-Control的效果必须(我是这么做的):

再打开一个tab 在新的tab上,先打开chrome-dev,调到Network 重新输入刚才的前端页面,可以看到资源已变成from disk cache 说明:在rfc7234规范中,此字段的说明就分为request header和response header。我们同样以此为分类。相关的源码在这里

response添加Cache-Control

首先我们通过给response headers添加Cache-Control,以此来实现缓存。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var myRequest = new Request('/api', {
  headers: {
    'Cache-Control': 'no-cache'
  }
})

重复上面步骤,这次发现from disk cache没了

request之max-age=0

max-age=0表示不管response怎么设置,在重新获取资源之前,先检验ETag/Last-Modified

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 服务端
// 由于使用的是express,为了使etag生效
// app.set('etag', false);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 客户端
var myRequest = new Request('/api', {
  headers: {
    'Cache-Control': 'max-age=0'
  }
})

可以看到变成304了,因为去验证了Etag了。

response之max-age和no-cache

经过试验,不管是max-age还是no-cache,都会返回304

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 客户端
var myRequest = new Request('/api', {
  // headers: {
  //   'Cache-Control': 'max-age=0'
  // }
})
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.get('/api', (req, res) => {
  res.setHeader('Cache-Control', 'max-age=0')
  // res.setHeader('Cache-Control', 'no-cache')
  res.json(666)
})

总结

no-cahce并不是表示无缓存,而是指使用缓存一定要先经过验证 response header的no-cache和max-age=0和request header的max-age=0的作用是一样的:都要求在使用缓存之前进行验证 request header的no-cache,则表示要重新获取请求,其作用类似于no-store(可能你对这个结论很有怀疑,这不符合no-cache的设定。究其原因,在文档中有对其说明,称为Disambiguating Multiple Responses)

总之就是一句话: 请求头里的Cache-Control是no-cache,是浏览器通知服务器:本地没有缓存数据 响应头中的 Cache-Control:max-age=8888 是通知浏览器:8888 秒之内别来烦我,自己从缓冲区中刷新

最后感谢大佬指点迷津:www.jianshu.com/p/1744780dd…

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年12月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
asp.net core 系列之Reponse caching 之 Response Caching Middleware(4)
通过在ASP.NET Core应用中 配置 Response Caching Middleware ,决定什么时候 response 是可以缓存,存储response,和从缓存中提供response 服务。
Vincent-yuan
2019/09/11
7570
asp.net core 系列之Reponse caching 之 Response Caching Middleware(4)
HTTP 缓存
先判断 Etag, 再判断 last-modified. 但是结果会由服务器决策.
lucifer210
2020/06/29
7010
HTTP 缓存
HTTP缓存(Cache-Control、Expires 、ETag)
HTTP缓存( ETag、Cache-Control)——谷歌开发者 HTTP缓存有利于web性能优化
代码之风
2018/10/31
5.6K0
Nginx下关于缓存控制字段cache-control的配置说明 - 运维小结
HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。 请求时的缓存指令包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。 响应消息中的指令包括: public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。
洗尽了浮华
2019/05/25
9.5K0
设计一个完美的HTTP缓存策略
作为一个前端,了解http缓存是非常必要,它不仅是面试的必要环节,也更是实战开发中必不可少需要了解的知识点,本文作者将从缓存的概念讲到如何在业务中设计一个合理的缓存架构,带你一步一步解开http缓存的神秘面纱。
星哥玩云
2022/07/28
6330
设计一个完美的HTTP缓存策略
HTTP缓存策略
缓存的作用就是提升网页加载速度。浏览器加载一个完整的网页势必会引用外部资源(图片,js,css)。若每次加载网页都要去加载这些外部资源则会引起不必要的时间和资源浪费,且会影响用户体验。而解决上述问题需要一个优秀的缓存策略。除此之外,web缓存的优点还有很多,例如:减轻服务器压力
ruochen
2021/11/25
6320
你了解 Cache-Control 作为请求头是什么意思吗?
Cache-Control 作为「响应头」,用以控制缓存策略,这也是前端 HTTP 缓存策略的基础。
山月
2022/11/02
3.3K0
你了解 Cache-Control 作为请求头是什么意思吗?
Cache-Control 请求头与浏览器强制刷新
Cache-Control 作为「响应头」,用以控制缓存策略,这也是前端 HTTP 缓存策略的基础。
山月
2023/01/10
2.6K0
Cache-Control 请求头与浏览器强制刷新
【浏览器】:缓存
缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。缓存的种类有很多,其大致可归为两类:
WEBJ2EE
2020/11/20
9930
【浏览器】:缓存
用ASP.NET Core 2.1 建立规范的 REST API -- 缓存和并发
本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblogs.com/cgzl/p/9019314.html
solenovex
2018/08/01
7360
用ASP.NET Core 2.1 建立规范的 REST API -- 缓存和并发
HTTP缓存,浏览器缓存
可分为两大类:http缓存和浏览器缓存。我们今天重点讲的是http缓存,所以关于浏览器缓存大家自行去查阅。下面这张图是前端缓存的一个大致知识点:
回忆大大
2023/03/19
1.1K0
HTTP缓存,浏览器缓存
http缓存机制
响应头中设置 Expires的值为格林威治时间 就是告诉客户端,此资源的请求可以用到指定时间点,在此时间之前,都要重新发请求到服务器请求这个资源,强制读取缓存
刘嘿哈
2022/10/25
6640
前端缓存最佳实践
在介绍缓存的时候,我们习惯将缓存分为强缓存和协商缓存两种。两者的主要区别是使用本地缓存的时候,是否需要向服务器验证本地缓存是否依旧有效。顾名思义,协商缓存,就是需要和服务器进行协商,最终确定是否使用本地缓存。
小生方勤
2019/06/03
1.1K1
浏览器 & HTTP 缓存策略
强缓存是指在缓存期间,请求不会发送到服务器,浏览器直接返回缓存结果,需要设置 Header:
leocoder
2020/03/27
6190
通过 Node.js 小示例学习浏览器缓存策略
在后端为了加速服务的访问速度,通常可以使用 Memcached、Redis 做数据缓存,那么在浏览器端又有哪些缓存策略呢?
五月君
2020/09/17
1.4K0
Request header field x-xsrf-token is not allowed by Access-Control-Allow-Headers in preflight respon
设置下Access-Control-Allow-Headers @Component @WebFilter public class CorsFilter implements Filter { private final static String SPLIT = ";"; @Value("${roc.allow.origins:http://aa.aa.cn:8088}") private String allowOrigins ; private List<Stri
IT云清
2021/12/06
1.3K0
JavaScript中的前端缓存策略
在互联网技术飞速更新的今天,前端性能的优化已经成为决定用户体验优劣的核心环节。在这其中,前端缓存策略作为一种有效的性能提升手段,它不仅显著减轻了服务器的负载,还大幅缩短了页面加载时间,从而极大提升了用户的满意度和使用体验。本文旨在深入剖析JavaScript在前端缓存策略中的应用,旨在为开发者提供更为实际和详尽的指导,帮助他们更精准地把握并运用这些策略,以优化网站性能。
iwhao
2024/07/07
2700
HTTP缓存机制的Etag、Last-Modified、If-None-Match和If-Modified-Since、Expires和Cache-Control笔记
    Etag由服务器端生成,客户端通过If-None-Match这个条件请求来验证资源是否修改。请求一个文件的流程可能如下:
砖业洋__
2023/05/06
2.9K0
HTTP缓存机制的Etag、Last-Modified、If-None-Match和If-Modified-Since、Expires和Cache-Control笔记
前端网络高级篇(三)浏览器缓存
浏览器缓存有多种形式,持久化或者会话存储。以chrome为例,打开调试面板,找到Application选项卡,就可以看到它所支持的各种缓存模式
娜姐
2022/01/20
9600
前端网络高级篇(三)浏览器缓存
HTTP之缓存控制
http://www.nirsoft.net/utils/chrome_cache_view.html
Ashen
2020/06/01
6490
HTTP之缓存控制
推荐阅读
相关推荐
asp.net core 系列之Reponse caching 之 Response Caching Middleware(4)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验