前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >response headers添加Cache-Control 和request headers添加Cache-Control 到底有啥区别

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

作者头像
用户7413032
发布2020-06-11 16:14:55
4.3K0
发布2020-06-11 16:14:55
举报
文章被收录于专栏:佛曰不可说丶

前言

缓存是一个复合的概念,本文是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
复制
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
复制
// 服务端
// 由于使用的是express,为了使etag生效
// app.set('etag', false);
代码语言:javascript
复制
// 客户端
var myRequest = new Request('/api', {
  headers: {
    'Cache-Control': 'max-age=0'
  }
})

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

response之max-age和no-cache

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

代码语言:javascript
复制
// 客户端
var myRequest = new Request('/api', {
  // headers: {
  //   'Cache-Control': 'max-age=0'
  // }
})
代码语言:javascript
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • response添加Cache-Control
  • request之max-age=0
  • response之max-age和no-cache
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档