Cache-Control头
介绍
Cache-Control头在HTTP中有一定的难度,第一它既可以用于请求头,也可以用于响应头(这里主要将响应缓存)。第二,它控制着两个缓存,本地缓存:指客户端本地及其中的缓存(大多指浏览器缓存),但是它完全不受控制,通常浏览器会自己决定是否把某些内容放到缓存中,同时用户也可以自己处理缓存(清空)。共享缓存,处于客户端和服务器之间的缓存。既CDN。开发者可以绝对的控制。
代码示例
1. Cache-Control: public max-age=3600
2. Cache-Control: private immutable
3. Cache-Control: no-cache
4. Cache-Control: public max-age=3600 s-maxage=7200
5. Cache-Control: public max-age=3600 proxy-revalidate
属性
首先,Cache-Control有三种属性:缓冲能力、过期时间和二次验证。
缓冲能力
- private:表示它只应该存在本地缓存;
- public:表示它既可以存在共享缓存,也可以被存在本地缓存;
- no-cache:表示不论是本地缓存还是共享缓存,在使用它以前必须用缓存里的值来重新验证(并不是表示不能使用缓存)。
- no-store:表示不允许被缓存
过期时间
- max-age=:设置缓存时间,设置单位为秒。本地缓存和共享缓存都可以。
- s-maxage=:覆盖max-age属性。只在共享缓存中起作用。
二次验证(表示精细控制)
- immutable:表示文档是不能修改的
- must-revalidate:表示客户端(浏览器)必须检查代理服务商是否存在,即使它已经本地缓存了也要检查
- proxy-revalidata:表示共享缓存(CDN)必须要检查源是否存在,即使已经存在了缓存。
对示例代码的解释
- 本地缓存和CDN均缓存一小时
- 不能缓存在CDN,只能缓存在本地。并且一旦缓存了,则不能呗更新;
- 不能缓存,如果一定要缓存的话,确保对其进行二次验证;
- 本地缓存一小时,CDN上缓存2小时;
- 本地和CDN均被缓存一小时,但是如果CDN收到请求,则尽管已经缓存了一小时,还是要检查源中文档是否已经被改变。
关于请求头中的Cache-Control
cache-Control不是响应头独有的,在有些请求头中会带有Cache-Control,但是我们为什么很少在请求头中见到这个呢?(也很少见到这方面的资料)原因就是:他非常的危险!
我们知道,HTTP中的PUT方法是具有很大的风险性的,因为它有可能使服务端的资源被不安全的客户端修改,请求中的Cache-Control也是一样,来跟我仔细思考:前面说到CDN是为了加快访问同时减轻服务器的压力,甚至是保护底层的数据库,那么试想,如果客户端利用Cache-Control强行的关闭掉CDN直接把请求发送到服务器上,此时攻击者就可与击穿CDN!所以说他具有很大的风险性,实现这个规范的服务器少之又少!
Cache-Control头的更多相关文章
- 网站 cache control 最佳实践
推荐阅读: 2020年软件开发趋势 高并发案例 - 库存超发问题 负载均衡的分类及算法 异地多活架构 Postman 的替代品来了 有时,当第二次访问网站时,看起来比较怪,样式不正常. 通常,是因为 ...
- [转]ASP.NET Core: Static Files cache control using HTTP Headers
本文转自:https://www.ryadel.com/en/asp-net-core-static-files-cache-control-using-http-headers/ Every sea ...
- RFC2616-HTTP1.1-Header Field Definitions(头字段规定部分—译文)
part of Hypertext Transfer Protocol -- HTTP/1.1 RFC 2616 Fielding, et al. 14 头字段规定 该章节定义了HTTP1.1标准所包 ...
- miaosha
1:跨域请求配置 后端Controller 添加注解 @CrossOrigin(origins = {"*"},allowCredentials = "true" ...
- HTTP协议的头信息详解
转载地址:http://blog.csdn.net/guoguo1980/article/details/2649658 HTTP(HyperTextTransferProtocol)是超文本传输协议 ...
- 转: HTTP协议的头信息详解
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息.这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可 选的消息体组成.HTTP的头域包括通用头,请求头,响 ...
- HTTP头学习汇总
在开发http请求的时候,对HTTP头部信息一知半解,各种百度谷歌汇总一下学习到的资料. http简介 HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于 ...
- Symfony2学习笔记之HTTP Cache
富web应用程序的本质意味着它们的动态.无论你的应用程序多么有效率,每个请求比起静态文件来说总会存在很多的耗费.对于大多数web程序来说,这没什么. Symfony2非常的轻快,无论你做些严重超载的请 ...
- 网络编辑基础:对HTTP协议的头信息详解
HTTP(HyperTextTransferProtocol) 是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP 协议的详细内容请参 考RFC2616.HTTP协议采用了请求/响应模型 ...
- HTTP请求中的缓存(cache)机制
http://www.chaorenmao.com/blog/?p=79 流程 当资源第一次被访问的时候,HTTP头部如下 (Request-Line) GET /a.html HTTP/1.1Ho ...
随机推荐
- 《机器学习实战-KNN》—如何在cmd命令提示符下运行numpy和matplotlib
问题背景:好吧,文章标题是瞎取得.平常用cmd运行python代码问题不大,我在学习<机器学习实战>这本书时,发现cmd无法运行import numpy as np以及import mat ...
- 一个gpio 不受控制的bug
前几天调试一个flash灯的驱动程序,这可ic 有两个控制pin, 一个叫en1 一个叫en2, 根据spec的说明,不同的组合将产生不同的输出电流.但我发现,那个en1 这个pin 死活是拉不高的, ...
- json前后台传输,以及乱码中文问题探讨
背景介绍: 我现在的工作是做传统项目开发,没有用到框架.最近在做项目时,经常需要使用ajax从后台拿数据到前台,是json格式的.先说下我在项目中遇到的问题吧,前台拿到了数据,需要将其转化为对象,我使 ...
- css 相对绝对定位
用Div+CSS进行网站布局时,做一些浮动层等特殊特殊效果时要考虑到定位问题.这就要用到Position属性等.Position属性有四个值:static.fixed.absolute和relativ ...
- android、ipone在文本框中输入文字的不同
1.android机会输入时会在键盘上先显示,你确定后再填充如文本框 2.ipone机是你输入时就直接填充到文本框,当你选择输入信息时,就会先把文本框的内容清空,在填充选择的文字,这时就会有个问题,如 ...
- java中集合类详解
集合类说明及区别 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └W ...
- angularJS发起$http.post请求后台收不到数据解决方案
AngularJS发起$http.post请求 代码如下: $http({ method:'post', url:'post.php', data:{name:"aaa",id:1 ...
- [STL]vector与排序算法
vector与算法 头文件中包含大量与 vector 相关的算法,这些算法同样适用于其它容器,比如 std::list 等. 排序(Sort) 相关函数: std::sort :普通排序 defaul ...
- 结合两张表person和address
Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...
- webservice 交错数组
net webservices public DataSet SelectOPQuestionByWhere(string strWhere, string[][] strArry) { if (!k ...