【HTTP协议】HTTP报文以及返回结果的HTTP状态码

我就是我 2021-10-03 02:18 602阅读 0赞

一,HTTP报文下的HTTP信息

1.1,HTTP报文

用于HTTP协议交互的信息被称为HTTP报文,客户端的报文叫做请求报文,服务器端的报文叫做响应报文。

HTTP报文是一种很多行(由CR+LF作换行符)数据构成的字符串文本。

HTTP报文大致可分为报文首部和报文主体,之间用空行进行分割,但是,并不一定有报文主体。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70

1.2 ,请求报文及响应报文的结构

请求报文:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 1

响应报文

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 2

请求报文和响应报文由以下数据组成

请求行:包含请求的方法,请求URI和HTTP版本。

状态行:包含表明结果的状态码,原因短语和HTTP版本。

首部字段:包含表示请求和响应的各种条件和属性的各类首部。一般有四种首部:通用首部,请求首部,响应首部和实体首部。

其他

1.3,利用编码提升传输速率

HTTP在传输时进行编码,能有效处理大量访问请求,但是,进行编码的操作也需要计算机完成。

1.3.1,报文主体和实体主体的差异

  • 报文

报文时HTTP通信中的基本单位,由8位字节流组成,通过HTTP协议进行传输

  • 实体

作为请求或者响应的有效载荷数据被传输,其内容由实体首部和实体主体组成。

HTTP报文的主体用于传输请求或响应的实体主体。

通常情况下,报文主体等于实体主体,只有在进行编码的时候实体主体才会发生差异。

1.3.2 压缩传输的内容编码

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接受并负责解码。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 3

1.3.3,分割发送的分块传输编码

在HTTP 通信过程中,请求的资源过大,在没有请求完成之前,浏览器无法显示请求页面,我们就需要进行分块处理,让浏览器逐步显示页面。这种编码形式就是分块传输编码。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 4

分块传输编码会将主体分为很多块,每一块都用16进制去标记块的大小,而实体的最后一块使用0“CR+LF”进行标记。

然会客户端进行解码,恢复到编码之前的实体。

在HTTP/1.1中存在一种称为传输编码的机制,它可以在通信时按照某种编码进行传输,但是只定义作为分块传输编码中。

1.4,发送多种数据的多部分对象集合

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 5

HTTP协议也采纳了多部分对象集合,发送的一份报文包含多类型实体。通常在图片和文本文件等上传时使用。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 6

1.5 ,获取部分内容的范围请求

如果你下载一个图片下载到一半的时候,突然断网了,你再进行下载就会从最开始进行下载,为了解决这种机制就需要一种可以恢复的机制,就是从上次断开的地方重新进行下载。

要实现该功能需要指定下载的实体范围,这就是范围请求。

对一份1-10000字节大小的资源,如果使用范围请求可以只请求5001-10000字节的内容。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 7

执行请求时,会用到首部字段Range字段来指定byte范围。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 8

1.6,进行内容协商返回最合适的内容

当浏览器的版本是英文或者中文的时候,访问相同的URI网站的WEB页面时,则会显示对应的英语或中文版本,这种机制就是内容协商。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 9

内容协商就是客户端和服务器端就响应的资源进行交涉,然后提供给客户端最合适的资源。内容协商会以响应资源的语言,字符集,编码方式等作为判断的基准。

包含在报文中的首部字段就是判断的基准。

20200420153539889.pngwatermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 10

内容协商技术有以下三种类型:

  • 服务器驱动协商

由服务器端进行内容协商。以请求首部字段作为参考,在服务器端自动处理。但是对用户来说,以浏览器发送的信息作为判定的依据,但是不一定筛选出最优的内容。

  • 客户端驱动协商

由客户端进行内容协商的方式,用户从浏览器的可选项列表中进行手动选择。

  • 透明协商

共同进行决定,由服务器端和客户端各自进行协商的一种写法。

二,HTTP状态码

2.1,状态码告知

状态码的职责就是描述返回的结果,通过结果用户就可以指导是否请求成功。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 11

状态码的类别

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 12

2.2 2XX 成功

2.2.1 200 ok

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 13

表示客户端发送的消息被服务器端正常处理了。

在响应报文中,响应信息随着方法的不同会发生改变,使用GET方法会返回对应的请求资源实体,而使用HEAD方法,就不会返回实体。

2.2.2 204 NOT FOUND

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 14

该状态码表示客户端请求处理成功,但是在返回的响应报文中不含实体的主体部分。

这个状态多出现在客户端向服务器发送信息,而服务器端不进行信息返回。

2.2.3 206 Partial Content

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 15

表示客户端进行范围请求,而服务器成功执行这部分的GET请求。响应报文中包含Content-Range指定范围的实体内容。

2.3,3xx重定向

2.3.1 moved Permanently

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 16

永久性重定向 。表示请求的资源被分配到新的URI上,以后应使用资源现在所使用的URI,

2.3.2,302 Found

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 17

临时性重定向。表示资源分配到了新的URI上,希望用户本次使用新的URI访问。

302和301相比:302代表的资源 不是被永久移动,只是临时性质的,换句话说,已经移动的资源对应的URI将来还有可能改变。

2.3.3,303 SeeOther

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 18

该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

302和303相同,但是303指明必须使用GET获取资源。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 19

2.3.4,not modified

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 20

表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但没有满足时返回。

20200420161250302.png

2.3.5 307 Temporary Redirect

临时重定向

4.4,客户端发生错误

4.4.1 400Bad Request

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 21

表示请求报文中存在语法错误。

4.4.2 401 Unauthorized

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 22

表示发出的请求需要进行HTTP认证的认证信息,如果之前进行过1次请求,则表示认证失败。

4.4.3 403 Forbidden

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 23

表示请求的资源禁止访问。

4.4.4 404 not found

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 24

表示服务器上没有访问的资源。或者服务器拒绝请求时进行说明。

2.5 5XX服务器错误

2.5.1,500 Internet server Error

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 25

表示服务器执行请求时发生了错误。

2.5.2 503 Service Unavailable

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTA4Ng_size_16_color_FFFFFF_t_70 26

表示服务器现在处于超负荷或者进行停机维护,现在无法处理请求。

发表评论

表情:
评论列表 (有 0 条评论,602人围观)

还没有评论,来说两句吧...

相关阅读

    相关 返回结果HTTP状态

    一、状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求还是出现了错误。

    相关 http协议状态

    遇到最多的状态码就是404和500,什么意思大家都很清楚,那http状态码还有什么值呢? 内容如下: 6.1.1状态码与原因短语 (Status Code and

    相关 返回结果HTTP状态

    状态码告知请求结果   状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。   状态码如200 OK,以3位数字和原因组成。 状态码的类别: <t