文档章节

HTTP通用首部字段类型详解

独孤蝈蝈
 独孤蝈蝈
发布于 2016/10/20 18:37
字数 2045
阅读 72
收藏 0

1,Cache-Control字段

通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。指令的参数是可选的,多个指令之间通过逗号“,”分隔。该指令可用于请求及响应时。

 

可用的指令按请求和响应两种分类如下:

缓存请求指令



缓存响应指令

 

可用的指令中具体分析如下:

(1)表示是否能缓存的指令

Cache-Control:public

当指定使用public指令时,则明确表明其他用户也可利用缓存。

Cache-Control:private

当指定使用private指令时,响应只以特定的用户作为对象,这与public正好相反。

Cache-Control:no-cache

使用no-cache指令的目的是为了防止从缓存中返回过期的资源。如果客户端发送的请求中包含,则表示客户端将不会接收缓存过的响应。缓存服务器必须把客户端请求转发給源服务器。如果服务器返回的响应中包含,那么缓存服务器不能对资源进行缓存,源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。

Cache-Control:no-cache=Location

由服务器返回的响应中,如果报文首部字段Cache-Control中对no-cache字段名具体指定了参数值,那么客户端在接收到这个被指定参数值的首部字段对应的响应报文后,就不能使用缓存。换言之,无参数值的首部字段可以使用缓存。只能在响应指令中指定该参数。

 

(2)控制可执行缓存的对象的指令

Cache-Control:no-store

请求(和对应的响应)或响应中包含机密信息,因此该指令规定缓存不能在本地存储请求或响应的任一部分。

 

(3)指定缓存期限和认证的指令

Cache-Control:s-maxage=604800(单位:秒)

s-maxage指令的功能和max-age指令相同,不同点在于s-maxage指令只适用于供多位用户使用的公共缓存服务器,即对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。

Cache-Control:max-age=604800(单位:秒)

当客户端发送的请求包含max-age指令时,如果判断缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源。当max-age值为0,那么缓存服务器通常需要将请求转发給源服务器。

当客户端发送的请求包含max-age指令时,缓存服务器将不对资源的有效性再做确认,而max-age数值代表资源保存为缓存的最长时间。

Cache-Control:min-fresh=60(单位:秒)

min-fresh指令要求缓存服务器返回至少还未过指定时间的缓存资源。这里即表示为60秒后资源无法作为响应返回了。

Cache-Control:max-stale=3600(单位:秒)

使用max-stale可指示缓存资源,即使过期页照样接收。如果指令未指定参数值,那无论经过多久,客户端都会接收响应;如果指定了具体数值,那么即使过期,只要仍处于max-stale指定时间内,仍旧会被客户端接收。

Cache-Control:only-if-cached

使用该指令表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。换言之,该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则会返回状态码504 Gateway Timeout。

Cache-Control:must-revalidate

使用must-revalidate指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。若代理无法连通源服务器再次获取有效资源的话,缓存必须給客户端一条504状态码。

使用must-revalidate指令会忽略请求的max-stale指令。即使在首部使用了max-stale,也不会再有效果。

Cache-Control:proxy-revalidate

proxy-revalidate指令要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性。

Cache-Control:no-transform

使用no-transform指令规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型。这样可以防止缓存或代理压缩图片等类似操作。

 

(4)Cache-Control扩展

Cache-Control:private,community=“UCI”

通过cache-extension标记(token),可以扩展Cache-Control首部字段内的指令。

 

2,Connection字段

Connection首部字段具备两个作用,一是控制不再转发給代理的首部字段,二是管理持久连接。

 

控制不再转发給代理的首部字段

Connection:不再转发的首部字段名

在客户端发送请求和服务器返回响应内,使用Connection首部字段,可控制不再转发給代理的首部字段(即Hop-by-hop首部)。

管理持久连接

Connection:Close

HTTP/1.1版本的默认连接都有持久连接。为此客户端会在持久连接上连续发送请求。当服务器端想明确断开连接时,则指定Connection首部字段的值为Close。


HTTP/1.1之前的HTTP版本的默认连接都是非持久连接。为此,如果想在旧版本的HTTP协议上维持持续连接,则需要指定Connection首部字段为Keep-Alive。

Connection:Keep-Alive

 

3,Date字段

首部Date字段表示创建HTTP报文的日期和时间。

 

4,Pragma字段

Pragma字段是HTTP/1.1之前版本的遗留字段,仅作为HTTP/1.0的向后兼容而定义。该首部字段属于通用首部字段,但只用在客户端发送的请求中。客户端会要求所有的中间服务器不返回缓存的资源。

以HTTP/1.1为标准,所有中间服务器可直接采用Cache-Control:no-cache指定缓存的处理方式。但是要整体掌握全部中间服务器使用的HTTP协议版本不太显示,因此在请求报文中会同时采用两个首部字段。具体如下:

Cache-Control:no-cache

Prama:no-cache

 

5,Trailer字段

首部字段Trailer会事先说明在报文主体后记录了哪些首部字段。该首部字段应用在HTTP/1.1版本分块传输编码时。

 

6,Transfer-Encoding字段

该字段规定了传输报文主体时采用的编码方式。

 

7,Upgrade字段

该字段用于检测HTTP协议以及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。


首部字段Upgrade指定为TLS/1.0,要注意此处两个首部字段的对应关系,如图可知,此时Connection设置为Upgrade。Upgrade首部字段产生作用的Upgrade对象仅限于客户端和邻接服务器之间。因此,实用首部字段Upgrade时,要将Connection设置为Upgrade。

 

8,Via字段

使用首部字段Via是为了追踪客户端和服务器之间的请求和响应报文的传输路径。报文经过代理或网关时,会在首部字段Via中附加该服务器的信息,然后再进行转发。首部字段Via不仅用于追踪报文的转发,还可避免请求回环的发生,所以必须在经过代理时附加该首部字段内容。


如图中Via字段数据,其中1.0为接收请求的服务器上应用的HTTP协议版本。Via首部是为了追踪传输路径,所以经常会和TRACE方法一起使用。

 

9,Warning字段

HTTP/1.1的Warning首部是从HTTP/1.0的响应首部Retry-After演变过来的。该首部通常会告知用户一些与缓存相关的问题的警告。HTTP/1.1中定义了七种警告,且警告码具备扩展性。

本文转载自:http://mp.weixin.qq.com/s?__biz=MzAwMTc0NTU3NA==&idx=2&mid=401815852&sn=59b79d03472adfb7afb1f6c0cd73

独孤蝈蝈
粉丝 4
博文 59
码字总数 39108
作品 0
朝阳
程序员
私信 提问
HTTP首部字段详解

《图解HTTP》笔记(一) HTTP报文结构 请求报文:报文首部(方法,URI,HTTP版本,HTTP首部字段),空行,报文主体 响应报文:报文首部(HTTP版本,状态码,HTTP首部字段),空行,报文主体 ...

落沙w
2017/12/13
0
0
一篇文章带你详解 HTTP 协议(网络协议篇一)

本篇文章篇幅比较长,先来个思维导图预览一下。 一、概述 1.计算机网络体系结构分层 2.TCP/IP 通信传输流 利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层...

涤生_Woo
2017/07/12
0
0
一篇文章带你搞懂HTTP

image 参考 《HTTP权威指南》 Http协议-你需要收藏了 前言 最近,想要深扒一下爬虫,于是开始用python爬一些网站,但慢慢觉得自己对HTTP协议的理解不够系统,于是在前辈的推荐下,看了《HTT...

iu嘟嘟
2017/11/14
0
0
【java程序员理解HTTP】【5】小结

请求响应报文结构 请求报文结构 请求报文实例 响应报文结构 响应报文实例 HTTP常用的响应状态码 200 OK //客户端请求成功 400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 ...

karma123
2018/08/14
0
0
图解http(二)

一、http/1.1 首部字段一览 1. 通用首部字段 首部字段名 说明 Cache-Control 控制缓存的行为 Connection 逐跳首部、链接的管理 Date 创建报文的日期时间 Pragma 报文指令 Trailer 报文末端的...

jdkwky
2017/11/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部