HTTP 报文是在客户端和服务器之间通过 HTTP 协议进行通信时传输的数据格式。HTTP 报文包括请求报文和响应报文两种类型。HTTP 请求报文是由客户端(如浏览器)发送给服务器的,而 HTTP 响应报文是由服务器发送给客户端的。

请求头部和响应头部是 HTTP 报文的一部分,它们包含了一系列键值对,用于描述和控制报文的传输。这些键值对提供了关于客户端、服务器、请求或响应的元数据,以及有关如何处理报文主体的指示。

HTTP 报文的基本结构如下:

  1. 请求报文
  • 请求行:包含 HTTP 方法(如 GET、POST、PUT、DELETE 等)、请求的资源的 URI 和 HTTP 协议的版本。
  • 请求头部:包含一系列键值对,用于描述客户端和请求的信息,例如 User-Agent、Accept、Content-Type、Authorization 等。
  • 空行:用于分隔请求头部和请求主体。
  • 请求主体(可选):包含请求相关的数据,例如在 POST 或 PUT 请求中发送的表单数据或 JSON 数据。
  1. 响应报文
  • 状态行:包含 HTTP 协议的版本、状态码(如 200、404、500 等)和状态消息(如 “OK”、“Not Found”、“Internal Server Error” 等)。
  • 响应头部:包含一系列键值对,用于描述服务器和响应的信息,例如 Server、Content-Type、Content-Length、Cache-Control 等。
  • 空行:用于分隔响应头部和响应主体。
  • 响应主体:包含响应相关的数据,例如 HTML、CSS、JavaScript、JSON 数据或图像等。

示例:

请求报文:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Connection: keep-alive

响应报文:

HTTP/1.1 200 OK
Date: Mon, 26 Apr 2021 12:00:00 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
Last-Modified: Sun, 25 Apr 2021 12:00:00 GMT
ETag: "2b3a-5f2d96bdbb776"
Accept-Ranges: bytes
Content-Length: 11034
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
  <h1>Welcome to the ExamplePage</h1>
  <p>This is an example HTML page.</p>
</body>
</html>

在这个例子中,请求报文中的请求行是 “GET /index.html HTTP/1.1”,表示客户端想要获取位于 “/index.html” 的资源。请求头部包含了客户端浏览器的信息、可接受的内容类型等。请求报文没有请求主体,因为 GET 请求通常不包含主体。

响应报文中的状态行是 “HTTP/1.1 200 OK”,表示请求成功,服务器将返回所请求的资源。响应头部包含了服务器的信息、内容类型、内容长度等。响应主体包含了请求的 HTML 页面内容。

请注意,这个示例仅展示了一个简单的 GET 请求和相应的响应。其他类型的 HTTP 请求(如 POST、PUT、DELETE 等)可能具有不同的结构和内容。

其它请求与get有什么区别?

HTTP 协议定义了多种请求方法,以满足不同类型的操作需求。除了 GET 请求之外,常见的 HTTP 请求方法还包括 POST、PUT、DELETE、HEAD、OPTIONS、PATCH 等。各种请求方法在目的和用法上有所不同:

  1. GET:用于请求指定资源的信息。GET 请求是只读操作,不应对服务器上的数据产生任何副作用。
  2. POST:用于提交数据,通常用于创建新资源、提交表单数据或上传文件。POST 请求可以修改服务器上的数据。
  3. PUT:用于更新现有资源。与 POST 不同,PUT 是幂等操作,多次执行相同的 PUT 请求具有相同的效果。
  4. DELETE:用于删除指定资源。DELETE 请求会对服务器上的数据产生副作用。
  5. HEAD:与 GET 类似,但只请求资源的头部信息,不返回资源的主体内容。HEAD 请求可用于获取元数据,例如资源的大小、类型或最后修改时间。
  6. OPTIONS:用于查询目标资源所支持的 HTTP 方法。服务器应在响应头部的 “Allow” 字段中返回支持的方法列表。
  7. PATCH:用于部分更新资源。与 PUT 不同,PATCH 只需要发送需要修改的部分,而不是整个资源。

除了请求方法之外,不同类型的 HTTP 请求还可以在请求头部和请求主体方面有所不同。例如,POST 和 PUT 请求通常包含请求主体,用于发送创建或更新资源所需的数据。相反,GET 和 HEAD 请求通常不包含请求主体。

值得注意的是,HTTP 请求方法的行为可能因服务器实现和资源类型而异。例如,某些服务器可能允许使用 POST 请求更新现有资源,而其他服务器可能要求使用 PUT 或 PATCH 方法。为了遵循最佳实践,建议根据 HTTP 方法的预期行为来实现您的服务器和客户端。