HTTP:HTTP报文

如果说HTTP是因特网的信使,那么HTTP报文就是用它来搬东西的包裹了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1. 报文流

HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息(meta-information)开头,这些信息描述了报文的内容以及含义,后面跟着可选的数据部分。这些报文在客户端、服务器和代理之间流动。 术语“流入”、“流出”、“上游”、“下游”都是描述报文方向的。

1.1 报文流入源端服务器

HTTP使用术语流入和流出来描述事务处理的方向。报文流入源端服务器,工作完成之后,会流回用户的Agent代理中。

在这里插入图片描述

1.2 报文向下游流动

HTTP报文会像河水一样流动。不管是请求报文还是响应报文,所有报文都会向下游(downstream)流动。所有报文的发送者都在接收者的上流。在图中对请求报文来说,代理1位于代理3的上流,但对影响报文来说,它就位于代理3的下游。
在这里插入图片描述

1.3 报文的组成部分

HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。它由三部分组成:对报文进行描述的起始行、包含属性的首部块,以及可选的、包含数据的主体部分。
在这里插入图片描述

1.3.1 报文的语法

所有的HTTP报文可以分为两类:请求报文和响应报文。请求报文会向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端。请求和响应的报文的基本报文结构相同。
在这里插入图片描述

1.3.2 起始行

所有的HTTP报文都以一个起始行作为开始。请求报文的起始行说明了要做些什么。相应报文的起始行说明发生了什么。

1. 请求行

请求报文,请求服务器对资源进行一些操作。请求报文的起始行,或称为请求行,包含了一个方法和一个请求 URL,这个方法描述了服务器应该执行的操作,请求 URL描述了要对哪个资源执行这个方法。请求行中还包含 HTTP 的版本,用来告知服务器,客户端使用的是哪种 HTTP。

所有这些字段都由空格符分隔。在图a中请求方法为GET,请求URL为/test/hi-there.txt,版本为HTTP/1.0,在HTTP1.0之前,并不要求请求航中包含HTTP版本号。
在这里插入图片描述

2. 响应行

响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。响应报文的起始行,或称为响应行,包含了响应报文使用的 HTTP 版本、数字状态码,以及描述操作状态的文本形式的原因短语。

所有这些字段都由空格符进行分隔。在图b中,HTTP 版本为 HTTP/1.0,状态码为 200(表示成功),原因短语为 OK,表示文档己经被成功返回了。在 HTTP/1.0之前,井不要求在响应中包含响应行。

3. 方法

请求的起始行以方法作为开始,方法用来告知服务器要做些什么。比如,在行GET /specials/saw-blade.gif HTTP/1.0 中,方法就是 GET。

HTTP 规范中定义了一组常用的请求方法。比如,GET 方法负责从服务器获取一个文档,POST 方法会向服务器发送需要处理的数据,OPTIONS 方法用于确定Web服务器的一般功能,或者 Web 服务器处理特定资源的能力。

表 3-1描述了7种这样的方法。注意,有些方法的请求报文中有主体,有些则是无主体的请求。
在这里插入图片描述

4. 状态码

方法是用来告诉服务器做什么事情的,状态码则用来告诉客户端,发生了什么事情。

状态码位于响应的起始行中。比如,在行 HTTP/1.0 200 OK中,状态码就是 200。

可以通过三位数字代码对不同状态码进行分类:

  • 200到299之间的状态码表示成功。
  • 300 到399之间的代码表示资源已经被移走了。
  • 400到499之间的代码表示客户端的请求出错了。
  • 500到 599 之间的代码表示服务器出错了。

在这里插入图片描述

5.原因短语

原因短语是响应起始行中的最后一个组件。它为状态码提供了文本形式的解释。比如,在行 HTTP/1.0 200 OK中,OK 就是原因短语

1.3.3 首部

HTTP 首部字段向请求和响应报文中添加了一些附加信息。本质上来说,它们只是一些名/值对的列表。比如,下面的首部行会向 Content-Length 首部字段城值19:

Content -length: 19
1. 首部范围

HTTP规范定义了几种首部字段。应用程序也可以随意发明自己所用的首部。HTTP 首部可以分为以下几类。

  • 通用首部 :既可以出现在请求报文中,也可以出现在响应报文中。

  • 请求首部:提供更多有关请求的信息。

  • 响应首部:提供更多有关响应的信息。

  • 实体首部:描述主体的长度和内容,或者资源自身。

  • 扩展首部:规范中没有定义的新首部。

每个 HTTP 首部都有一种简单的语法:名字后面跟着冒号(:),然后跟上可选的空格,再跟上字段值,最后是一个 CRLF。
在这里插入图片描述

2. 首部延续行

将长的首部行分为多行可以提高可读性,多出来的每行前面至少要有一个空格或制表符 (tab)。在这里插入图片描述
// TODO

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boy快快长大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值