通用首部字段

通用首部字段是指,请求报文和响应报文双方都会使用的首部。

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-通用首部字段的更多相关文章

  1. http协议(七)通用首部字段

    通用首部字段的意思,就是:请求和响应报文双方都会使用的首部 1.Cache-Control 通过指定它的指令,能操作缓存的工作机制 指令参数是可选的,多个指令通过“,”分隔 Cache-Control ...

  2. http协议基础(七)通用首部字段

    通用首部字段的意思,就是:请求和响应报文双方都会使用的首部 1.Cache-Control 通过指定它的指令,能操作缓存的工作机制 指令参数是可选的,多个指令通过“,”分隔 Cache-Control ...

  3. HTTP协议08-请求首部字段

    请求首部字段 请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息.客户端信息,对响应内容相关的优先级等内容 1)Accept 通知服务器,用户代理能够处理的媒体类型及媒 ...

  4. HTTP协议10-实体首部字段

    实体首部字段 实体首部字段是包含咋请求报文和响应报文中实体部分的首部,用于补充内容的更新时间等于实体相关的信息. 1)Allow Allow:GET,HEAD 用于通知客户端能够支持访问指定资源的请求 ...

  5. HTTP协议09-响应首部字段

    响应首部字段 响应首部字段是由服务器向客户端返回响应报文中所使用的字段,用于补充响应的附加信息.服务器信息,以及对客户端的附加要求等信息. 1)Accept-Ranges Accept-Range:b ...

  6. HTTP===通用首部字段的各种指令解释

    Cache-Control 通过指定首部字段 Cache-Control 的指令,就能操作缓存的工作机制. 指令的参数是可选的,多个指令之间通过“,”分隔.首部字段 Cache-Control 的指令 ...

  7. HTTP 协议常见首部字段

    首部字段 1.HTTP协议的请求和响应报文中必定包含HTTP首部.首部内容为客户端和服务器处理请求和响应提供了所必须的信息. 2.HTTP首部字段是由首部字段名和字段值构成,中间用冒号“:”隔开.字段 ...

  8. HTTP协议图--HTTP 报文首部之首部字段(重点分析)

    1.首部字段概述 先来回顾一下首部字段在报文的位置,HTTP 报文包含报文首部和报文主体,报文首部包含请求行(或状态行)和首部字段. 在报文众多的字段当中,HTTP 首部字段包含的信息最为丰富.首部字 ...

  9. HTTP 首部字段详细介绍

    本文是HTTP解析系列第二篇,如果对http协议不是很了解,可以选去看第一篇:带新手走进神秘的HTTP协议,本文主要是对Http的首部字段进行详细解析. HTTP 协议的请求和响应报文中必定包含 HT ...

随机推荐

  1. UEditor js动态创建和textarea中渲染【原】

    UEditor动态创建和textarea中渲染 http://ueditor.baidu.com/website/examples/textareaDemo.html <!DOCTYPE> ...

  2. navicat and connection is being used

    1.在已经保存的连接上上编辑,测试连接成功,但是点击连接就会一直提示 connection is being used 2.需要新建一个连接,才能使用,不能再已保存的上面修改

  3. DBUtils数据库连接池

    DBUtils pip install DBUtils 模式一: 为每个线程创建一个连接.(内部是通过threading.local实现的) 模式二: 创建一定个数的连接,所有线程都来连接池中获取.( ...

  4. windows下通过压缩包安装MySQL

    一.下载压缩包 二.解压缩后存放在该路径下 三.配置环境变量     将D:\Program Files\mysql-8.0.11-winx64\bin添加到用户PATH变量或系统PATH变量中   ...

  5. Linux查看版本信息

    查看Linux版本以及是32位还是64位 查看版本 一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@S-CentOS home]# cat /proc ...

  6. mongodb 添加字段并设置默认值

    db.doc名称.update({}, {$set: {新字段名称: 默认值}}, false, true) 如:db.fly_bill.update({}, {$set: {usableStatus ...

  7. ubuntu终端命令启动matlab方法

    让所有用户都有权限使用matlab,在终端输入 sudo gedit /etc/profile 在后行写 export MATLABPATH=/home/ubuntu/MATLAB/R2016b:$M ...

  8. 第26月第23天 nsobject 单例 CFAbsoluteTimeGetCurrent

    1.nsobject 单例 sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/ ...

  9. Kaldi的data目录解析

    data/test # things in data/*test* and data/*train* cmvn.scp # Start point of every audio feature at ...

  10. windows上git安装

    Git的官方网站:http://git-scm.com 1.下载:http://msysgit.github.com/ 2.安装 3.配置 用户名.邮箱 这个很重要将来项目提交的账号   $ git ...