读书笔记:《图解HTTP》第三章 HTTP报文

原文地址

博客积累地址

HTTP报文的作用

HTTP报文时是HTTP进行请求和响应时用来交换信息的,可以理解它为搬东西的包裹,来搬运交换的信息

报文流

  • HTTP报文在HTTP应用程序(客户端、服务器、代理)之间发送数据块,这些数据块以文本形式描述了报文的内容和含义。
  • 这些报文在客户端、服务器、代理之间流动,称之报文流,用流入、流出、上游和下游这些术语描述报文流动的方向

报文如何流动

报文是由客户端流入服务器的

由客户端流入源端服务器,服务器处理完之后,流回(流出)用户的Agent代理中

报文流入源端服务器示意图:
报文流入源端服务器示意图

所有报文都会向下游流动

所有报文的发送者都在接收者的上游
对于请求报文来说,客户端是发送者,对于响应报文来说,服务器端是发送者

报文向下游流动示意图:
报文向下游流动

报文的组成部分

报文语法

HTTP报文分为两类:

  • 请求报文:客户端向web服务器请求一个动作
  • 响应报文: 服务器将请求结果返回给客户端

请求和响应报文的基本报文结构相同,都是由三部分组成:

  1. 起始行:对报文进行描述
  2. 首部:一些属性
  3. 主体:数据【可选】

请求报文和响应报文只有起始行的语法不同

  • 请求报文结构
<method> <request-url> <version>
<header>

<entity-body>
  • 响应报文结构
<version> <status-code> <reason-phrase>
<header>

<entity-body>

下面是对各部分的简要说明:

字段名描述
方法(method)HTTP请求方法
请求url (request-url)请求资源的路径
版本(version)使用的HTTP版本,格式为: HTTP/<主要版本号>.<次要版本号>
状态码(status-code)数字HTTP状态码,用于描述请求过程的状态,比如成功、失败
原因短语(reason-phrase)上面数字状态码的简短文本描述
首部(header)可以有0或多个首部。格式为: <名字>:<值>,以空行结束
主体(entity-body)包含由任意数据组成的数据块,并不是所有报文都有主体

请求和响应报文示例:
请求和响应报文示例

起始行

上面我们知道HTTP报文分为请求报文和响应报文两类,而且只有起始行不同

这里我们是请求报文的起始行为请求行,响应报文的起始行为响应行

HTTP报文-首部部分

HTTP报文的首部字段向请求和响应报文中添加一些附加信息,本质上来说,它们只是一些<名字>/<值>对的列表

首部分类

HTTP规范定义了几种首部字段,应用程序也可以随意发明自己所用的首部

  • 通用首部

既可以出现在请求报文中,也可以出现在响应报文中

字段描述
Cache-Control通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。
Connection控制不在转发给代理的首部字段;管理持久连接。
Data表明创建HTTP报文的时间和日期。
Pragma只用在客户端发送的请求中,所有的中间服务器不返回缓存的资源。
Trailer事先说明报文主体后记录了哪些首部字段。同样可以用在分块传输编码时。
Transfer-Encoding规定了传输报文主体时采用的编码方式。
Upgrade用于检测HTTP协议及其他协议是否可以使用更高的版本进行通信。
Via为了追踪客户端与服务器之间的请求和响应报文的传输路径。
Warning通常会告知用户一些与缓存相关的问题的警告
  • 请求首部

提供请求相关的信息

字段描述
Accept该字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。
Accept-Charset用来通知服务器用户代理支持的字符集及字符集的相对优先顺序,可一次性指定多种字符集。
Accept-Encoding用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
Accept-Language用来告知服务器用户代理嫩巩固处理的自然语言集(中文或英文等),以及自然语言集的相对优先级。
Authorization用来告知服务器,用户代理的认证信息。
Expect客户端使用首部字段Except来告知服务器,期望出现的某种指定行为。
From用来告知服务器使用用户代理的用户的电子邮件地址。
Host告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯一一个必须包含在请求内的首部字段。
If-Match类似于If-xxx这样的请求首部,可以称为条件请求。
If-Modified-Since告知服务器若该字段值早于资源的更新时间,则希望能处理该请求。
If-None-Match该字段值得实体标记值与请求资源的ETag不一致时,它就告知服务器处理该请求。
If-Range它告知服务器若指定的If-Range字段值和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之则返回全体资源。
If-Unmodified-Since告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。
Max-Forwards通过TRACE方法或OPTIONS方法,发送包含首部字段Max-Forwards的请求时,该字段以十进制整数形式指定可经过的服务器最大数目。当服务器接收到Max-Forwards值为0的请求时,则不再进行转发,而是直接返回响应。
Proxy-Authorization客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。
Range告知服务器资源的指定范围。
TE告知服务器客户端能够处理响应的传输编码方式及相对优先级。
User-Agent将创建请求的浏览器用户代理名称等信息传达给服务器
  • 响应首部

提供响应相关的信息

字段描述
Accept-Ranges用来告知客户端服务器是否能够处理范围请求,以指定获取服务器端某个部分的资源。
Age告知客户端,源服务器在多久前创建了响应。单位秒。
ETag告知客户端实体标识,它是一种可将资源以字符串形式做唯一标识的方式。
Location可以将响应接收方引导至某个与请求URI位置不同的资源。
Proxy-Authenticate把由代理服务器所要求的认证信息发送给客户端。
Retry-After告知客户端应该在多久之后再次发送请求。
Server告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
Vary可对缓存进行控制,源服务器回向代理服务器传达关于本地缓存使用方法的命令。
WWW-Authenticate用于HTTP访问认证
  • 实体首部

描述主体的长度和内容,或者资源自身

字段描述
Allow用于通知客户端能够支持Request-URI指定资源的所有HTTP方法。
Content-Encoding告知客户端服务器对实体的主体部分选用的内容编码方式。(gzip/compress/deflate/identity)
Content-Language告知客户端,实体主体使用的自然语言。(中文或英文等语言)
Content-Length表明了实体主体部分的大小。
Content-Location给出与报文主体返回资源对应的URI。
Content-MD5是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。
Content-Range针对范围请求,返回响应时使用的首部字段,能告知客户端作为相应返回的实体的哪个部分符合范围请求。
Content-Type说明了实体主体内对象的媒体类型,该字段用type/subtype形式赋值。
Expires会将资源失效的日期告知客户端。
Last-Modified指明资源最终修改的时间
  • 拓展首部

规范中没有定义的新首部

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值