HTTP 消息是什么?HTTP 请求和响应消息怎么理解?

文章导读
上一个 测验 下一个 HTTP 消息为客户端和服务器之间的通信提供了一种方式。HTTP 消息可以是客户端发送到服务器的请求,或者服务器发送到客户端的响应。HTTP 基于客户端-服务器架构模型,是一个无状态的请求/响应协议,通过在可靠的 TCP/IP 连接上交换消息来运行。
📋 目录
  1. HTTP 消息组件
  2. 消息起始行
  3. 头部
  4. Message Body
A A

HTTP - 消息



上一个
测验
下一个

HTTP 消息为客户端和服务器之间的通信提供了一种方式。HTTP 消息可以是客户端发送到服务器的请求,或者服务器发送到客户端的响应。HTTP 基于客户端-服务器架构模型,是一个无状态的请求/响应协议,通过在可靠的 TCP/IP 连接上交换消息来运行。

HTTP “客户端”是一个程序(Web 浏览器或其他任何客户端),它为发送一个或多个 HTTP 请求消息的目的与服务器建立连接。HTTP “服务器”是一个程序(通常是像 Apache Web Server 或 Internet Information Services IIS 等 Web 服务器),它接受连接以通过发送 HTTP 响应消息来服务 HTTP 请求。

HTTP message example

HTTP 使用统一资源标识符 (URI) 来标识给定的资源并建立连接。一旦连接建立,HTTP 消息就会以类似于 Internet 邮件 [RFC5322] 和多用途 Internet 邮件扩展 (MIME) [RFC2045] 所使用的格式传递。这些消息包括从客户端到服务器的请求和从服务器到客户端的响应,其格式如下:

 HTTP-message   = <Request> | <Response> ; HTTP/1.1 messages

HTTP 消息组件

HTTP 请求和 HTTP 响应使用 RFC 822 的通用消息格式来传输所需数据。这种通用消息格式由以下四个部分组成。

  • 消息起始行
  • 头部
  • 消息体

在接下来的部分中,我们将详细解释 HTTP 消息中使用的每个实体。

消息起始行

起始行具有以下通用语法:

start-line = Request-Line | Status-Line
  • 对于请求消息,起始行包含 HTTP 方法、request-target 和 HTTP 版本。 示例:GET /hello.htm HTTP/1.1
  • 对于响应消息,起始行包含 HTTP 版本、状态码和状态消息。 示例:HTTP/1.1 200 OK

我们将在分别讨论 HTTP 请求和 HTTP 响应消息时详细介绍 Request-LineStatus-Line

头部

HTTP 头部字段提供有关请求或响应,或消息体中发送的对象所需的必要信息。HTTP 消息头部有四种类型:

  • General-header:这些头部字段对请求和响应消息都有通用适用性。

  • Request-header:这些头部字段仅适用于请求消息。

  • Response-header:这些头部字段仅适用于响应消息。

  • Entity-header:这些头部字段定义了 entity-body 的元信息,或者如果没有主体,则定义请求标识的资源的元信息。

上述所有头部都遵循相同的通用格式,每个头部字段由名称后跟冒号(:)和字段值组成,如下所示:

field-name ":" [ field-value ]

以下是各种头部字段的示例:

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

Message Body

HTTP 消息的 message body 部分是可选的,但如果存在,则用于承载与请求或响应关联的 entity-body。如果关联了 entity body,通常 Content-TypeContent-Length 首部行会指定关联 body 的性质。

Message body 是承载实际 HTTP 请求数据(包括表单数据和上传文件等)以及服务器 HTTP 响应数据(包括文件、图像等)的部分。下面是一个 message body 的简单内容示例:

<html>
   <body>
      <h1>Hello, World!</h1>
   </body>
</html>

接下来的两章将利用上述解释的概念来准备 HTTP Requests 和 HTTP Responses。