侧边栏壁纸
  • 累计撰写 247 篇文章
  • 累计创建 16 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

HTTP 报文简介及组成结构

kaixindeken
2021-04-23 / 0 评论 / 0 点赞 / 109 阅读 / 1,745 字

HTTP 报文简介

用于 HTTP 协议交互的信息被称为 HTTP 报文,请求端(客户端)发起的 HTTP 报文叫做请求报文,响应端(服务器端)发出的 HTTP 报文叫做响应报文。请求报文会向 Web 服务器请求一个动作,响应报文会将请求的处理结果返回给客户端。

HTTP 报文本身是由多行(用CR+LF作换行符,即\r\n)数据构成的字符串文本,这些文本信息描述了报文的内容及含义,后面跟着可选的数据部分。

HTTP 报文大致可分为报文首部和报文主体两块,两者由首次出现的空行来分隔,通常,并不一定要有报文主体,比如 GET 请求就没有:

截屏20210423 上午9.01.00.png

而 POST 请求则包含报文主体:

截屏20210423 上午9.07.26.png

正常的响应报文通常都包含报文主体。

HTTP 报文组成结构

了解了 HTTP 报文的基本概念后,下面我们具体分析 HTTP 报文的组成结构。

HTTP 报文是简单的格式化数据块:

1.jpeg

报文分为请求报文和响应报文,二者结构类似,都由三部分构成 —— 对报文进行描述的起始行、包含属性的首部字段、以及可选的包含数据的报文主体部分:

1.jpeg

通常我们可以将请求报文的起始行称作请求行,对应的报文主体称作请求主体;将响应报文的起始行称作状态行(包含状态码),对应的报文主体称作响应主体。首部字段又可以细分为请求首部字段、响应首部字段、通用首部字段和实体首部字段。

起始行与首部字段之间通过一个换行符分隔(CR+LF),多个首部字段之间也是通过换行符分隔,报文首部与报文主体之间则通过一个一个空行分隔(两个CR+LF),报文首部有纯文本格式的字符串组成,报文主体则可以包含多种格式数据。

请求报文可以抽象为如下格式:

<method> <request-URL> <version>(请求行)
<headers>

<entity-body>

响应报文可以抽象如下格式:

<version> <status-code> <reason-phrase>(响应行)
<headers>

<entity-body>

下面是对各部分的简单描述:

  • 方法(method):客户端希望服务器对资源执行的动作,比如 GET、POST、PUT、DELETE 等;
  • 请求 URL(request-URL):命名了所请求资源,或者 URL 路径组成的完整 URL,比如 http://laravel58.test/ 这个示例中是 /;
    版本(version):HTTP 版本,目前主流版本是 1.1;
  • 状态码(status-code):三个数字,描述了请求过程所发生的情况,例如 200、404、500 等;
  • 原因短语(reason-phrase):数字状态码的可读版本;
  • 首部字段(headers):可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号,然后是一个可选的空格,接着是一个值,最后是一个 CR+LF(即\r\n),报文首部是由一个空行结束的,表示了首部列表的结束和实体主体部分的开始;
  • 主体(entity-body):包含一个由任意数据组成的数据块,并不是所有报文都包含实体的主体部分。
0

评论区