2.1、HTTP 通信所使用的报文格式

报文:HTTP 报文是简单的格式化数据块,由一行一行的简单字符串组成的。

2.1.1、HTTP 报文包括以下三个部分

  • 起始行:报文的第一行就是起始行,在请求报文中称为请求行,用来说明要做些什么;在响应报文中称为响应行,说明出现了什么情况
  • 首部字段:起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,两者之间用冒号(:)来分隔,冒号有个可选的空格。首部以一个空行结束
  • 主体(可选):空行之后就是可选的报文主体,请求主体中包括 了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体可以包含文本或任意 的二进制数据(比如图片、视频、音轨、软件程序)。

2.1.2、格式详解

请求报文的格式:

  1. <method> <request-URL> <version>
  2. <headers>
  3. <entity-body>

请求报文,主体为空,如:

请求报文格式

响应报文的格式(注意,只有起始行的语法有所不同):

  1. <version> <status> <reason-phrase>
  2. <headers>
  3. <entity-body>

响应报文如:

响应报文格式

另外需要注意HTTP/0.9 报文也由请求和响应组成,但请求中只包含方法和请求 URL,响应中只包含实体,缺点是灵活性差,有局限性。

下面是各部分的描述:

  • method:客户端希望服务器对资源执行的动作,如常见的HTTP七种方法:

http七种方法

  • request-URL :命名了所请求资源,或者 URL 路径组件的完整 URL。
  • version:告知服务器,客户端使用哪种HTTP版本,格式HTTP/.。在HTTP/1.0之前不要求包含HTTP版本号。目的在于为使用HTTP的应用程序提供一种线索,以便互相了解对方的能力和报文格式。注意,版本号不能当作小数来处理,major和minor被当作一个单独的数字来处理,如HTTP/2.22比HTTP/2.3的版本高。
  • status-code:状态码告诉客户端发生了什么事。status-code 常见的比如:200 OK表示成功;401 Unauthorized表示未授权,需要输入用户名和密码;404 Not Found表示服务器无法找到所请求URL对应的资源。

  • reason-phrase:描述操作状态的文本形式的原因短语,数字状态码的可读版本,便于人们理解。

  • headers:首部。

  • entity-body:实体的主体部分。