HTTP协议07-通用首部字段
通用首部字段
通用首部字段是指,请求报文和响应报文双方都会使用的首部。
1)Cache-Control
通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。
指令的参数可以多选,多个指令之间使用","分割。
Cache-Control:private,max-age=0,no-cache
1.1 缓存请求指令
| 指令 | 参数 | 说明 | 
| no-cache | 无 | 强制向源服务器再次验证 | 
| no-store | 无 | 不缓存请求或响应任何内容 | 
| max-age=[秒] | 必须 | 响应的最大Age值 | 
| max-stale(=[秒]) | 可省略 | 接受已过期的响应 | 
| min-fresh=[秒] | 必需 | 期望在制定时间内的响应仍有效 | 
| no-transform | 无 | 代理不可更改媒体类型 | 
| only-fi-cached | 无 | 从缓存获取资源 | 
| cacheextension | - | 新指令标记(token) | 
1.2 缓存响应指令
| 指令 | 参数 | 说明 | 
| public | 无 | 可想任意方提供响应的缓存 | 
| private | 可省略 | 仅向特定用户返回响应 | 
| no-cache | 可省略 | 缓存前必须先确认其有效性 | 
| no-store | 无 | 不缓存请求或响应的任何内容 | 
| no-transform | 无 | 代理不可更改媒体类型 | 
| must-revalidate | 无 | 可缓存但必须再向源服务器进行确认 | 
| proxy-revaildate | 无 | 要求中间缓存服务器对缓存的响应有效性再进行确认 | 
| max-age=[秒] | 必需 | 响应的最大Age值 | 
| s-maxage=[秒] | 必需 | 公共缓存服务器响应的最大Age值 | 
| cache-extension | - | 新指令标记(token) | 
1.3 表示是否能缓存的指令
public指令
Cache-Control:public
当指定使用public指令时,则明确表明其他用户也可利用缓存
private指令
Cache-Control:private
当指定private指令后,响应只以特定的用户作为对象。
缓存服务器会对该特定用户提供资源缓存服务,对于其他用户发送过来的请求,代理服务器不会反悔缓存。
no-cache指令
Cache-Control:no-cache
使用no-cache指令的目的是为了防止从缓存中返回过期的资源。
客户端发送的请求中包含no-cache指令,则表示客户端不接收缓存过的响应。中间的缓存服务器必须把客户端的请求转发给服务器。
如果服务器返回的响应中带有no-cache指令,那么缓存服务器不能对资源进行缓存。源服务器以后也将不再对缓存服务器请求提出的资源有效性进行确认,且禁止对其响应资源进行缓存操作。
Cache-Control:no-cache=Location
由服务器返回的响应中,若报文首部字段Cache-Control中对no-cache这个字段中指定参数值。那么客户端在接收到这个被指定参数值的手部字段对应的响应报文后,就不能使用缓存。
换言之,无参数值的首部字段可以使用缓存。只能在响应指令中指定该参数
(个人理解,响应中有no-cache字段,缓存服务器就不能缓存。如果该字段有值,则客户端不能进行缓存。无值。则客户端可以缓存。)
1.4 no-store指令
Cache-Control:no-store
当使用no-store指令时,表示请求或响应中包含机密信息,规定不能本地缓存请求或响应。
1.5 指定缓存期限和认证的指令
max-age指令
Cache-Control:max-age=604800(单位:秒)
当客户端发送的请求中包含max-age指令时,如果缓存资源的缓存时间数值比指定时间的小,那么客户端接收缓存资源。当max-age值为0时,缓存服务器通常需要将请求转发给源服务器
当服务器返回的响应中包含max-age指令时,缓存服务器讲不对资源的有效性进行确认,而max-age值代表资源最长可缓存时间。
s-maxage指令
Cache-Control:s-maxage604800(单位:秒)
s-maxage指令和max-age指令相同,不同是s-maxage指定一般是给代理服务器的。也就是说给同一用户重复返回响应的服务器来说,这个指令没有用。
当使用s-maxage指令后,则直接忽略对Expires首部字段及max-age指令的处理
min-fiesh指令
Cache-Control:min-fresh=60(单位:秒)
min-fiesh指令要求缓存服务器返回至少还未过指定时间的缓存资源。
max-stale指令
Cache-Control:max-stale=3600(单位:秒)
使用max-stale指令,可使缓存即使过期也可被接收
如果指令没有参数,那么无论经过多久,客户端都会接收响应;如果有参数,即使过期了,只要扔处于max-stale指定的市价年内,仍旧会被客户端接受。
only-fi-cache指令
Cache-Control:only-if-cached
表示在缓存服务器存在相应资源的缓存情况下,并返回缓存。如果没有则返回504状态码
must-revalidate指令
Cache-Control:must-revalidate
使用must-revalidate指令,代理回向源服务器再次验证即将返回的响应缓存是否仍有效。
若代理无法联通源服务器再次获取有效资源的话,返回504状态码
使用must-revalidate指令会忽略请求的max-stale指令
proxy-revalidate指令
Cache-Control:proxy-revalidate
要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性。
no-transform指令
Cache-Control:no-transform
使用no-transform指令规定无论在请求还是响应中,缓存都不能更改实体的媒体类型。
防止缓存或代理压缩图片等操作
2)Connection
具体如下两个作用
2.1 控制不在转发给代理的首部字段
Connection:不再转发的首部字段名
在请求或响应中,代理会删除相应首部字段后再转发(既用来控制Hop-by-hop首部字段)
2.2 管理持久连接
Connection:Close
HTTP/1.1是默认保持持久连接,当服务器端想要断开持久连接,需要在首部指定Connection首部字段值为close
Connection:Keep-Alive
HTTP/1.1版本之前是默认非持久连接,如果想在旧版本上保持持久连接,需要指定Connection首部字段值为Keep-Alive
3)Date
首部字段Date表明创建HTTP报文的日期和时间
Date:Wed, 06 Mar 2019 16:03:03 GMT
4)Pragma
HTTP/1.1之前版本的历史遗留字段,为了HTTP/1.0向后兼容而定义。
Pragma:no-cache
只用在客户端发送的请求中,要求所有中间服务器不返回缓存的资源
如果所有的中间服务器都是以HTTP/1.1版本为基准,那直接采用Cache-Control:no-cache即可。但是这不现实。所以一般的请求的会同时含有以下字段。
Cache-Control:no-cache
Pragma:no-cache
5)Trailer
事先说明报文主体记录了哪些首部字段。可应用在HTTP/1.1版本分块传输编码时
6)Transfer-Encoding
规定了报文的编码方式,仅对分块传输编码有效。
Transfer-Encoding:chunked
7)Upgrade
用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数可以指定一个完全不同的通信协议。
客户端请求
GET /index.htm HTTP/1.1
Upgrade:TLS/1.0
Connection:Upgrade
服务器响应
HTTP/1.1 101 Switching Protocols
Upgrade:TLS/1.0,HTTP/1.1
Connection:Upgrade
Upgrade字段只限于客户端和相邻服务器之间起作用,所以要用Connection首部字段
对于有Upgrade首部字段的请求,服务器可返回101 Switching Protocols 状态码
8)Via
追踪客户端与服务器端之间请求和响应报文的传输路径。还可避免请求回环的产生。
9)Warning
告知用户一些与缓存相关的警告。
Warning首部的格式如下。日期时间部分可省略
Warning:[警告码][警告的主机:端口号]"[警告内容]"([日期时间])
HTTP/1.1定义了7种警告,警告码具备拓展性。
| 警告码 | 警告内容 | 说明 | 
| 110 | Response is stale(响应已过期) | 代理返回已过期的资源 | 
| 111 | Revalidation failed(再验证失败) | 代理再验证资源有效性时失败(服务器无法到达等原因) | 
| 112 | Disconnection operation(断开连接操作) | 代理与互联网连接被故意切断 | 
| 113 | Heuristic expiration(试探性过期) | 响应的使用期超过24小时(有效缓存的设定时间大于24小时的情况下) | 
| 199 | Miscellaneous Warning(杂项警告) | 任意的警告内容 | 
| 214 | Transformation applied(使用了转换) | 代理对内容编码或媒体类型等执行了某些处理 | 
| 299 | Miscellaneous persistent warning(持久杂项警告) | 任意的警告内容 | 
HTTP协议07-通用首部字段的更多相关文章
- http协议(七)通用首部字段
		
通用首部字段的意思,就是:请求和响应报文双方都会使用的首部 1.Cache-Control 通过指定它的指令,能操作缓存的工作机制 指令参数是可选的,多个指令通过“,”分隔 Cache-Control ...
 - http协议基础(七)通用首部字段
		
通用首部字段的意思,就是:请求和响应报文双方都会使用的首部 1.Cache-Control 通过指定它的指令,能操作缓存的工作机制 指令参数是可选的,多个指令通过“,”分隔 Cache-Control ...
 - HTTP协议08-请求首部字段
		
请求首部字段 请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息.客户端信息,对响应内容相关的优先级等内容 1)Accept 通知服务器,用户代理能够处理的媒体类型及媒 ...
 - HTTP协议10-实体首部字段
		
实体首部字段 实体首部字段是包含咋请求报文和响应报文中实体部分的首部,用于补充内容的更新时间等于实体相关的信息. 1)Allow Allow:GET,HEAD 用于通知客户端能够支持访问指定资源的请求 ...
 - HTTP协议09-响应首部字段
		
响应首部字段 响应首部字段是由服务器向客户端返回响应报文中所使用的字段,用于补充响应的附加信息.服务器信息,以及对客户端的附加要求等信息. 1)Accept-Ranges Accept-Range:b ...
 - HTTP===通用首部字段的各种指令解释
		
Cache-Control 通过指定首部字段 Cache-Control 的指令,就能操作缓存的工作机制. 指令的参数是可选的,多个指令之间通过“,”分隔.首部字段 Cache-Control 的指令 ...
 - HTTP 协议常见首部字段
		
首部字段 1.HTTP协议的请求和响应报文中必定包含HTTP首部.首部内容为客户端和服务器处理请求和响应提供了所必须的信息. 2.HTTP首部字段是由首部字段名和字段值构成,中间用冒号“:”隔开.字段 ...
 - HTTP协议图--HTTP 报文首部之首部字段(重点分析)
		
1.首部字段概述 先来回顾一下首部字段在报文的位置,HTTP 报文包含报文首部和报文主体,报文首部包含请求行(或状态行)和首部字段. 在报文众多的字段当中,HTTP 首部字段包含的信息最为丰富.首部字 ...
 - HTTP 首部字段详细介绍
		
本文是HTTP解析系列第二篇,如果对http协议不是很了解,可以选去看第一篇:带新手走进神秘的HTTP协议,本文主要是对Http的首部字段进行详细解析. HTTP 协议的请求和响应报文中必定包含 HT ...
 
随机推荐
- Spring的RestTemplate
			
Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便.RestTemplate并没有限定Http的客户端类型 ...
 - 原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现
			
在我们日常生活中运动就是必不可少的部分,走路.跑步.打篮球等.在网页交互设计上运动也是必不可少的部分,创建的网站交互设计运动模块有轮播图,下拉菜单,还有各种炫酷的游戏效果都跟运动密切相关.所以很重要, ...
 - POJ 3070(求斐波那契数 矩阵快速幂)
			
题意就是求第 n 个斐波那契数. 由于时间和内存限制,显然不能直接暴力解或者打表,想到用矩阵快速幂的做法. 代码如下: #include <cstdio> using namespace ...
 - UUID在Java中的实现与应用
			
UUID是什么 UUID的全称为:Universally Unique IDentifier,也被称为GUID(Globally Unique IDentifier).是一种由算法生成的唯一标识,它实 ...
 - 上传文件服务与web服务分离
			
业务场景:1. 后端服务为java web应用,使用tomcat容器,多实例集群化部署.2. 前端使用nginx作为后端应用的反向代理. 业务需求:现在需要在java web应用端上传文件,同时还要能 ...
 - java定时器实现总结
			
前言:Java定时器目前主要有3种实现方式:JDK组件,Spring Task,Quartz框架. 1. JDK组件(1) java.util.TimerTask MyTimerTask.java: ...
 - jqGrid api 中文说明
			
JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情. 下面是转自其他人b ...
 - floyd求最小环
			
;i<=n;i++) ;j<=n;j++) g[i][j]=g[j][i]=dis[i][j]=dis[j][i]=inf; ;i<=m;i++){ int u,v,w;scanf( ...
 - 开发mis系统需要的技术
			
一.b/s架构 b/s架构:就broser/server,浏览器/服务器的说法.服务器端要运行tomcat,提供链接数据库服务供java代码读写数据,这个可以在eclipse中配置运行.浏览器则解释j ...
 - cookie, session, token 是什么 以及相应的安全考量
			
Cookie cookie 最常见的是用来保存一些账号信息,比如下图里的 记住账号 就是记录到了cookie里面 cookie 更主要的是针对和server通信的,我们知道http 是无状态的,那如果 ...