HTTP 协议
如果您在 https://tools.ietf.org/html/rfc2068 上查看 RFC2068 标准,就会发现它的描述几乎无穷无尽。幸运的是,关于这个协议,至少对于初学者来说,你需要知道的东西要短得多。
HTTP 是超文本传输协议(HyperText Transfer Protocol)的缩写。与其他协议一样,其目标是让两个实体或节点相互通信。为了实现这一目标,信息需要以双方都能理解的方式格式化,而且实体必须遵守一些预先制定的规则。
一个简单的例子
下图显示了非常基本的消息交换:

如果您不理解本图中的所有元素,请不要担心,我们很快就会对其进行描述。在这个表示法中,有两个实体:发送方和接收方。发送方向接收方发送一条信息。开始通信的这条信息称为请求。在本例中,信息是一个 GET 请求。接收方收到信息后进行处理,并生成第二条信息:响应。在本例中,响应显示 200 状态代码,这意味着请求已成功处理。
HTTP 是无状态的,也就是说,它独立处理每个请求,与之前的请求无关。这意味着,有了这个请求和响应序列,通信就结束了。任何新的请求都不会注意到这一特定的信息交换。
消息的部分内容
HTTP 消息包含几个部分。 我们将仅定义其中最重要的部分。
网址
信息的 URL 就是信息的目的地。请求将包含接收方的 URL,而响应将包含发送方的 URL。
大家可能都知道,URL 可以包含额外的参数,即查询字符串。当发送方希望添加额外数据时,就会使用查询字符串。例如,请看这个 URL: http://myserver.com/greeting?name=Alex 。该 URL 包含一个参数:名称,其值为 Alex
。它不能作为 URL http://myserver.com/greeting 的一部分,因此发送者选择将其添加到 URL 的末尾。稍后您将看到,这并不是我们在信息中添加额外信息的唯一方法。
HTTP 方法
HTTP 方法是消息的动词。它标识发送者想要对此消息执行什么类型的操作。最常见的是 GET 和 POST。
-
GET:这是向接收方询问某些信息,接收方通常会将这些信息发送回来。最常见的例子是询问一个网页,接收方会回复所请求网页的 HTML 代码。
-
POST:这意味着发送方希望执行一项操作,更新接收方持有的数据。例如,发送方可以要求接收方更新其个人资料名称。
还有其他方法,如 PUT、DELETE 或 OPTION,但它们在网络开发中使用较少,不过在 REST API 中起着至关重要的作用,这将在第 9 章 "构建 REST API" 中介绍。
Body
正文部分通常出现在响应报文中,尽管请求报文也可以包含正文部分。报文正文包含报文本身的内容;例如,如果用户请求一个网页,那么响应的正文将由表示该网页的 HTML 代码组成。
很快,我们将讨论请求如何也包含正文,正文用于发送作为请求一部分的额外信息,如表单参数。
body 可以包含任何格式的文本;可以是表示网页的 HTML 文本、纯文本、图像内容、JSON 等。
一个更复杂的例子
下图显示了 POST 请求及其响应:

在这次信息交换中,我们可以看到另一种重要方法 POST 的作用。在这种情况下,发送者试图发送一个请求,以更新某个实体的数据。信息中包含一个值为 84 的 cookie ID,它可以识别要更新的实体。正文中还包含两个参数:姓名和年龄。这就是接收者要更新的数据。
提交网络表单 将参数作为正文的一部分是提交表单时发送信息的常用方法,但并非唯一方法。您可以在 URL 中添加查询字符串,在信息正文中添加 JSON 等等。 |
响应的状态代码为 200,表示请求已成功处理。此外,响应还包含一个正文,这次格式为 JSON,表示更新实体的新状态。