HTTP报文格式

HTTP报文有两种:HTTP请求报文、HTTP响应报文,具体分析如下。


一、HTTP请求报文格式

请求报文由三部分组成:请求行(request line)、首部行(header line)、实体体(entity body)。

先上图

(注:SP代表空格,CR代表回车,LF代表换行)
(注:图片摘自《计算机网络 自顶向下方法(第7版)》 图2-8)

示例:

GET   /dir1/dir2/hello.html   HTTP/1.1
Host:www.test.com
Connection:close
User-agent:Mozilla/5.0
Accept-language:zh-cn

我们通过分析示例来讲解:

1、请求行

请求行有三个字段:方法、URL、HTTP版本

(1)方法:可以取不同的值,包括GET、POST、HEAD、PUT和DELETE等。绝大部分HTTP请求报文使用GET方法。

(2)URL:请求对象的标识。示例中请求对象标识就是:/dir1/dir2/hello.html

(3)HTTP版本:略。示例中HTTP版本为1.1。

2、首部行

首部行由多组键值对(首部字段名:首部字段值)组成。下面分析示例:

Host:指明请求对象所在主机。示例中主机为www.test.com。

Connection:浏览器告知服务器是否使用持续连接。示例中close代表不使用持续连接。

User-agent:指明用户代理,即浏览器类型。示例中浏览器类型为Mozilla/5.0。

Accept-language:指明用户希望得到请求对象的语言版本。示例中zh-cn代表中文版本。

3、实体体

使用GET方法时,实体体为空;

而使用POST方法时才使用实体体,举例说明:

当用户提交表单时,HTTP使用POST方法,则实体体内包含的就是用户在表单的输入值。

 


二、HTTP响应报文格式

响应报文由三部分组成:状态行(status line)、首部行(header line)、实体体(entity body)。

继续上图

(注:SP代表空格,CR代表回车,LF代表换行)
(注:图片摘自《计算机网络 自顶向下方法(第7版)》 图2-9)

示例:

HTTP/1.1   200   OK
Connection:close
Date:Fri,   29   Jan   2021   21:13:06   GMT
Server:Apache/2.2.3(CentOS)
Last-Modified:Fri,   29   Jan   2021   21:11:56   GMT
Content-Length:6821
Content-Type:text/html

(data   data   data   data   ...)

我们继续分析示例:

1、状态行:

状态行有三个字段:HTTP版本、状态码、状态信息

(1)HTTP版本:略。

(2)状态码及状态信息:下面列出常见状态码及状态信息

  • 200   OK:请求成功,信息在返回的响应报文中。
  • 301   Moved Permanently:请求对象被永久转移了,新的URL定义在响应报文的首部行Location中。客户端自动获取新的URL。
  • 404   Not Found:被请求的文档不在服务器上。
  • 505   HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。

2、首部行

同样的,首部行由多组键值对(首部字段名:首部字段值)组成。下面分析示例:

Connection:服务器通知客户,发送完报文后是否持续该TCP连接。示例中close代表发送完报文后关闭该TCP连接。

Date:服务器产生并发送该响应报文的日期时间。

Server:指明产生响应报文的服务器类型,类似于请求报文首部行中User-agent字段。示例中为Apache Web服务器。

Last-Modified:对象创建或者最后修改的日期时间。

Content-Length:被发送对象中的字节数。

Content-Type:实体体中对象类型。示例中 text/html 代表HTML文件。

3、实体体

服务器响应客户端的数据对象,在请求示例中,请求对象为hello.html,那么该实体体内容就是hello.html。


 若便于理解,为大家准备了一份思维导图:

posted @ 2021-01-29 21:39  Bill9  阅读(3767)  评论(0)    收藏  举报