写点什么

图解 HTTP 权威指南(一)| HTTP 报文

用户头像
李先生
关注
发布于: 2020 年 12 月 22 日

                                                                               

   

一、问题

1、报文流是如何流动的

2、HTTP 报文的三个组成部分

3、请求和响应报文之间的区别

4、请求报文支持的各种方法

5、和响应报文一起返回的各种状态码

6、各种各样的 HTTP 首部都是用来做什么的

 

二、报文流

1、什么是 HTTP 报文

HTTP 报文是在 HTTP 应用程序直接发送的数据块。这些数据块以一些文本形式的元信息(meta-information)开头。这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文在客户端、服务器和代理直接流动。

 

常用术语:流入、流出、上游、下游

 

2、报文流入源端服务器

HTTP 使用术语流入(inbound)流出(outbound)来描述事务处理(transaction)的方向。报文流入源端服务器,工作完成后,会流回用户的 Agent 代理中。

 

 

3、报文向下游流动

HTTP 报文会像河水一样流动。不管是请求报文还是响应报文,所有报文都会向下游(downstream)流动。所有的报文的发送者都在接收者的上游(upstream)。

 

对于请求报文来说,代理 1 位于代理 3 的上游;但对于响应报文来说,它就位于代理 3 的下游。

 

三、报文的组成

HTTP 报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务端的响应。他们由三个部分组成:对报文进行描述的起始行(start line),包含属性的首部(header)块,以及可选的、包含数据的主体(body)部分。

 

 

起始行和首部是由行分隔符的 ASCII 文本,每行都以一个由两个字符组成的行终止序列作为结束,其中包含一个回车符(ASCII 码 13)和一个换行符(ASCII 码 10)。

实体的主体或报文的主体是一个可选的数据块。与起始行和首部不同的是主体可以包含文本或二进制数据,也可以为空。

 

四、报文的语法

所有的 HTTP 报文都可以分为两类:请求报文(request message)和响应报文(response massage)。请求报文会向 Web 服务器请求一个动作。响应报文会将请求的结果返回给客户端。请求和响应报文的基本报文机构相同。

 

请求报文的格式

<method> <request-URL> <version><headers>
<entity-body>
复制代码



响应报文的格式

<version> <status> <reason-phrase><headers>
<entity-body>
复制代码



五、详解

1、起始行

所有的 HTTP 报文都以一个起始行作为开始。请求报文的其实行说明了要做些什么。响应报文的起始行说明了发生什么

 

1)请求行

请求报文请求服务器对资源进行一些操作。请求报文的起始行,或称为请求行,包含了一个方法和一个请求的 URL,这个方法描述了服务器应该执行的操作,请求 URL 描述了要对哪个资源执行这个方法。请求行中还包含了 HTTP 的版本,用来告知服务器,客户端使用的是哪种 HTTP。

 

2)响应行

响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。响应报文的起始行,或称为响应行,包含了响应报文使用的 HTTP 版本、数字状态码,以及描述操作状态的文本形式的原因短语。

 

2、方法

请求的起始行以方法作为开始,方法用来告知服务器需要做些什么。

 


3、版本号

报文所使用的 HTTP 版本,格式为:

HTTP/<major>.<minor>
复制代码

其中主要版本号(major)和次要版本号(minor)都是整数。


4、状态码(status code)

这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(“成功”、“出错”等)。

 

 

5、原因短语(reason-phrase)

数字状态的可读版本,包含行终止序列之前的所有文本。

 

6、首部(header)

可以有零个或多个首部,每个首部都包含有个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个 CRLF。首部都是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。

 

 

7、实体的主体部分(entity-body)

实体的主题部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分,有时,报文只是以一个 CRLF 结束。

 

发布于: 2020 年 12 月 22 日阅读数: 849
用户头像

李先生

关注

专注于运维技术、SRE、DevOps等。 2020.07.23 加入

在平凡中坚持前行,总有一天会遇见不一样的自己。 公众号:运维汪

评论 (2 条评论)

发布
用户头像
写完记得好好检查一下,错别字太多了
2020 年 12 月 23 日 23:30
回复
好的,谢谢!
2020 年 12 月 25 日 18:10
回复
没有更多了
图解HTTP权威指南(一)| HTTP报文