1、问题
一、报文流是如何流动的
二、HTTP报文的三个组成部分
三、请求和响应报文之间的区别
四、请求报文支持的各类方法
五、和响应报文一块儿返回的各类状态码
六、各类各样的HTTP首部都是用来作什么的
2、报文流
一、什么是HTTP报文
HTTP报文是在HTTP应用程序直接发送的数据块。这些数据块以一些文本形式的元信息(meta-information)开头。这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文在客户端、服务器和代理直接流动。
经常使用术语:流入、流出、上游、下游
二、报文流入源端服务器
HTTP使用术语
流入(inbound)和
流出(outbound)来描述
事务处理(transaction)的方向。报文流入源端服务器,工做完成后,会流回用户的Agent代理中。
三、报文向下游流动
HTTP报文会像河水同样流动。不论是请求报文仍是响应报文,全部报文都会向下游(downstream)流动。全部的报文的发送者都在接收者的上游(upstream)。
对于请求报文来讲,代理1位于代理3的上游;但对于响应报文来讲,它就位于代理3的下游。
3、报文的组成
HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务端的响应。他们由三个部分组成:对报文进行描述的
起始行(start line),包含属性的
首部(header)块,以及可选的、包含数据的
主体(body)部分。
起始行和首部是由行分隔符的ASCII文本,每行都以一个由两个字符组成的行终止序列做为结束,其中包含一个回车符(ASCII码13)和一个换行符(ASCII码10)。
实体的主体或报文的主体是一个可选的数据块。与起始行和首部不一样的是主体能够包含文本或二进制数据,也能够为空。
4、报文的语法
全部的HTTP报文均可以分为两类:请求报文(request message)和响应报文(response massage)。请求报文会向Web服务器请求一个动做。响应报文会将请求的结果返回给客户端。请求和响应报文的基本报文机构相同。
请求报文的格式
<method> <request-URL> <version>
<headers>
<entity-body>

响应报文的格式
<version> <status> <reason-phrase>
<headers>
<entity-body>

4、详解
一、起始行
全部的HTTP报文都以一个起始行做为开始。请求报文的其实行说明了
要作些什么。响应报文的起始行说明了
发生什么。
1)请求行
请求报文请求服务器对资源进行一些操做。请求报文的起始行,或称为请求行,包含了一个方法和一个请求的URL,这个方法描述了服务器应该执行的操做,请求URL描述了要对哪一个资源执行这个方法。请求行中还包含了HTTP的版本,用来告知服务器,客户端使用的是哪一种HTTP。
2)响应行
响应报文承载了状态信息和操做产生的全部结果数据,将其返回给客户端。响应报文的起始行,或称为响应行,包含了响应报文使用的HTTP版本、数字状态码,以及描述操做状态的文本形式的缘由短语。
二、方法
请求的起始行以方法做为开始,方法用来告知服务器须要作些什么。
三、版本号
报文所使用的HTTP版本,格式为:
其中主要版本号(major)和次要版本号(minor)都是整数。服务器
四、状态码(status code)
这三位数字描述了请求过程当中所发生的状况。每一个状态码的第一位数字都用于描述状态的通常类别(“成功”、“出错”等)。
五、缘由短语(reason-phrase)
数字状态的可读版本,包含行终止序列以前的全部文本。
六、首部(header)
能够有零个或多个首部,每一个首部都包含有个名字,后面跟着一个冒号(:),而后是一个可选的空格,接着是一个值,最后是一个CRLF。首部都是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。
七、实体的主体部分(entity-body)
实体的主题部分包含一个由任意数据组成的数据块。并非全部的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。
4、交流学习
欢迎你们关注个人公众号,一块儿交流、学习。 运维

文中的思惟导图以及各类总结的表格均可关注公众号:运维汪,发送“1”后下载原图或原文件。