1. 关于HTTP消息头
HTTP消息头是在,客户端请求(Request)或服务器响应(Response)时传递的,位请求或响应的第一行,HTTP消息体(请求或响应的内容)是其后传输。HTTP消息头,以明文的字符串格式传送,以冒号分隔的键/值对,如:Accept-Charset: utf-8,每一个消息头最后以回车符(CR)和换行符(LF)结尾。
2. 常用的HTTP请求头
协议头 | 说明 | 值 |
---|---|---|
Accept | 浏览器可接受的MIME类型(Content-Types) | text/plain |
Accept-Charset | 可接受的字符集 | utf-8 |
Accept-Encoding | 可接受的响应内容的编码方式 | gzip, deflate |
Accept-Language | 可接受的响应内容语言列表 | en-US |
Cache-Control | 用来指定当前的请求/回复中的,是否使用缓存机制 | no-cache |
Connection | 客户端(浏览器)想要优先使用的连接类型 | keep-alive Upgrade |
Cookie | 由之前服务器通过Set-Cookie(见下文)设置的一个HTTP协议Cookie | Cookie: $Version=1; Skin=new; |
Content-Type | 请求体的MIME类型 (用于POST和PUT请求中) | pplication/x-www-form-urlencoded |
Upgrade | 要求服务器升级到一个高版本协议 | HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
3. 常用的HTTP响应头
协议头 | 说明 | 值 |
---|---|---|
Age | 响应对象在代理缓存中存在的时间,以秒为单位 | Age: 12 |
Cache-Control | 通知从服务器到客户端内的所有缓存机制,表示它们是否可以缓存这个对象及缓存有效时间。其单位为秒 | Cache-Control: max-age=3600 |
Expires | 指定一个日期/时间,超过该时间则认为此回应已经过期 | Expires: Thu, 01 Dec 1994 16:00:00 GMT |
Content-Language | 响就内容所使用的语言 | Content-Language: zh-cn |
Content-Type | 当前内容的MIME类型 | Content-Type: text/html; charset=utf-8 |
Expires | 指定一个日期/时间,超过该时间则认为此回应已经过期 | Expires: Thu, 01 Dec 1994 16:00:00 GMT |
4. HTTP协议头Cache-Control
Expires和Cache-Control就是服务端用来约定和客户端的有效时间的,但是如果同时存在,则被Cache-Control的max-age覆盖。
Cache-directive| 描述|存储策略|过期策略|请求字段
----|------|----
public|可被任何缓存区缓存|✔️||
private|资源仅被客户端缓存, 代理服务器不缓存|✔️||
no-cache|请求和响应消息不能缓存,相当于max-age:0,must-revalidate即资源被缓存, 但是缓存立刻过期, 同时下次访问时强制验证资源有效性|✔️|✔️|✔️
no-store|请求和响应都不缓存|✔️||✔️
max-age|缓存资源, 但是在指定时间(单位为秒)后缓存过期|✔️|✔️|✔️
5.http header中与缓存有关的key
key| 描述| 存储策略|过期策略|协商策略
----|------|----
Cache-Control|指定缓存机制,覆盖其它设置|✔️|✔️|
Pragma|http1.0字段,指定缓存机制|✔️||
Expires|http1.0字段,指定缓存的过期时间||✔️|
Last-Modified|资源最后一次的修改时间|||✔️
ETag|唯一标识请求资源的字符串|||✔️
下面我们来看下各个头域(key)的作用.
Cache-Control
浏览器缓存里, Cache-Control是金字塔顶尖的规则, 它藐视一切其他设置, 只要其他设置与其抵触, 一律覆盖之.不仅如此, 它还是一个复合规则, 包含多种值, 横跨 存储策略, 过期策略 两种, 同时在请求头和响应头都可设置.
语法为: "Cache-Control : cache-directive".