安全测试 - HTTP 消息

HTTP 消息

HTTP 基于客户端-服务器架构模型和无状态请求/响应协议,通过可靠的 TCP/IP 连接交换消息进行操作。

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

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

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

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

  • 起始行

  • 零个或多个标头字段,后跟 CRLF

  • 一个空行(即 CRLF 之前没有任何内容的行),表示标头字段的结尾

  • 可选的消息主体

以下部分将解释 HTTP 消息中使用的每个实体。

消息起始行

起始行将具有以下通用语法 −

start-line = Request-Line | Status-Line

我们将在讨论 HTTP 请求和 HTTP 响应消息时分别讨论请求行和状态行。现在让我们看看请求和响应情况下的起始行示例 −

GET /hello.htm HTTP/1.1     (This is Request-Line sent by the client)

HTTP/1.1 200 OK             (This is Status-Line sent by the server)

标头字段

HTTP 标头字段提供有关请求或响应或有关在消息正文中发送的对象的必需信息。HTTP 消息标头有以下四种类型 −

  • General-header − 这些标头字段对请求和响应消息均具有普遍适用性。

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

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

  • Entity-header −这些标头字段定义有关实体主体的元信息,或者在没有主体的情况下定义元信息。

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

message-header = 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

消息正文

消息正文部分对于 HTTP 消息而言是可选的,但如果可用,则用于承载与请求或响应相关联的实体正文。如果实体正文相关联,则通常 Content-TypeContent-Length 标头行指定关联正文的性质。

消息正文是承载实际 HTTP 请求数据(包括表单数据和上传数据等)和来自服务器的 HTTP 响应数据(包括文件、图像等)的正文。以下是消息正文的简单内容 −

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

http_protocol_basics.html