写点什么

HTTP 报文的组成

作者:阿泽🧸
  • 2023-04-16
    北京
  • 本文字数:1435 字

    阅读完需:约 5 分钟

HTTP报文的组成

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

1、请求行

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

2、响应行

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

3、方法

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


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

并不是所有服务器都实现了上表所有 7 种方法。而且,由于 HTTP 设计得易于扩展,所以除了这些方法之外,其他服务器可能还会实现一些自己的请求方法。这些附加的方法是对 HTTP 规范的扩展,因此被称为扩展方法。

4、状态码

方法是用来告诉服务器做什么事情的,状态码则用来告诉客户端,发生了什么事情。状态码位于响应的起始行中。


比如,在行 HTTP/1.0200 OK 中,状态码就是 200。客户端向一个 HTTP 服务器发送请求报文时,会发生很多事情。幸运的话,请求会成功完成。但你不会总是那么幸运的。服务器可能会告诉你无法找到所请求的资源,你没有访问资源的权限,或者资源被移到了其他地方。


状态码是在每条响应报文的起始行中返回的。会返回一个数字状态和一个可读的状态。数字码便于程序进行差错处理,而原因短语则更便于人们理解。


可以通过三位数字代码对不同状态码进行分类。200 到 299 之间的状态码表示成功。300 到 399 之间的代码表示资源已经被移走了。400 到 499 之间的代码表示客户端的请求出错了。500 到 599 之间的代码表示服务器出错了。

5、原因短语

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


原因短语是状态码的可读版本,应用程序开发者将其传送给用户,用以说明在请求期间发生了什么情况。HTTP 规范并没有提供任何硬性规定,要求原因短语以何种形式出现。

6、版本号

版本号会以 HTTP/x.y 的形式出现在请求和响应报文的起始行中。为 HTTP 应用程序提供了一种将自己所遵循的协议版本告知对方的方式。


使用版本号的目的是为使用 HTTP 的应用程序提供一种线索,以便互相了解对方的能力和报文格式。在与使用 HTTP 1.1 的应用程序进行通信的 HTTP 1.2 应用程序应该知道,它不能使用任何新的 1.2 特性,因为使用老版本协议的应用程序很可能无法实现这些特性。


版本号说明了应用程序支持的最高 HTTP 版本。但 HTTP/1.0 应用程序在解释包含 HTTP/1.1 的响应时,会认为这个响应是个 1.1 响应,而实际上这只是响应应用程序所使用的协议等级,在这些情况下,版本号会在应用程序之间造成误解。


注意,版本号不会被当作小数来处理。版本中的每个数字(比如 HTTP/1.0 中的 1 和 0)都会被当作一个单独的数字来处理。因此,在比较 HTTP 版本时,每个数字都必须单独进行比较,以便确定哪个版本更高。比如,HTTP/2.22 就比 HTTP/2.3 的版本要高,因为 22 比 3 大。

发布于: 刚刚阅读数: 3
用户头像

阿泽🧸

关注

还未添加个人签名 2020-11-12 加入

还未添加个人简介

评论

发布
暂无评论
HTTP报文的组成_HTTP_阿泽🧸_InfoQ写作社区