2.1、HTTP 通信所使用的报文格式
报文:HTTP 报文是简单的格式化数据块,由一行一行的简单字符串组成的。
2.1.1、HTTP 报文包括以下三个部分
- 起始行:报文的第一行就是起始行,在请求报文中称为请求行,用来说明要做些什么;在响应报文中称为响应行,说明出现了什么情况。
- 首部字段:起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,两者之间用冒号(:)来分隔,冒号有个可选的空格。首部以一个空行结束。
- 主体(可选):空行之后就是可选的报文主体,请求主体中包括 了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体可以包含文本或任意 的二进制数据(比如图片、视频、音轨、软件程序)。
2.1.2、格式详解
请求报文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
请求报文,主体为空,如:
响应报文的格式(注意,只有起始行的语法有所不同):
<version> <status> <reason-phrase>
<headers>
<entity-body>
响应报文如:
另外需要注意HTTP/0.9 报文也由请求和响应组成,但请求中只包含方法和请求 URL,响应中只包含实体,缺点是灵活性差,有局限性。
下面是各部分的描述:
- method:客户端希望服务器对资源执行的动作,如常见的HTTP七种方法:
- request-URL :命名了所请求资源,或者 URL 路径组件的完整 URL。
- version:告知服务器,客户端使用哪种HTTP版本,格式HTTP/.。在HTTP/1.0之前不要求包含HTTP版本号。目的在于为使用HTTP的应用程序提供一种线索,以便互相了解对方的能力和报文格式。注意,版本号不能当作小数来处理,major和minor被当作一个单独的数字来处理,如HTTP/2.22比HTTP/2.3的版本高。
status-code:状态码告诉客户端发生了什么事。 常见的比如:200 OK表示成功;401 Unauthorized表示未授权,需要输入用户名和密码;404 Not Found表示服务器无法找到所请求URL对应的资源。
reason-phrase:描述操作状态的文本形式的原因短语,数字状态码的可读版本,便于人们理解。
headers:首部。
- entity-body:实体的主体部分。