golang,go,博客,开源,编程

http报文详解

Published on with 0 views and 0 comments

HTTP报文介绍

HTTP(超文本传输协议,Hypertext Transfer Protocol)是客户端与服务器之间进行通信的协议。HTTP 报文是通过 HTTP 协议传输的数据单元,它包含了客户端请求服务器或者服务器响应客户端的信息。HTTP 报文主要分为 请求报文响应报文,它们的结构类似,包含了不同的内容以适应各自的作用。

1. HTTP请求报文

HTTP 请求报文由客户端发送给服务器,包含客户端的请求信息,如请求的资源、请求的方法等。请求报文的基本结构如下:

请求行
请求头
空行
请求体(可选)

1.1 请求行

请求行是请求报文的第一行,包含了 请求方法请求目标HTTP协议版本,它的格式为:

请求方法 请求目标 HTTP版本
  • 请求方法:指定客户端要对服务器进行的操作。常见的请求方法有:
    • GET:请求获取资源(如网页、图片、文件等)。
    • POST:提交数据(例如表单数据)给服务器。
    • PUT:更新或替换指定的资源。
    • DELETE:删除指定的资源。
    • HEAD:类似 GET 请求,但服务器只返回响应头,不返回实际的资源内容。
    • OPTIONS:获取服务器支持的 HTTP 方法。
    • PATCH:部分更新资源。
  • 请求目标:指定请求的资源地址。通常是 URI(统一资源标识符)或者相对路径。例如:/index.html 或者 /api/v1/resource
  • HTTP协议版本:指定使用的 HTTP 协议版本,常见的有 HTTP/1.1HTTP/2

示例:

GET /index.html HTTP/1.1

1.2 请求头

请求头(Headers)包含了关于请求的额外信息,例如客户端浏览器的类型、支持的压缩格式、身份验证信息等。每个头部字段由 字段名字段值 组成,字段名和值之间用冒号分隔,字段之间通过换行分隔。

常见的请求头包括:

  • Host:指定服务器的主机名和端口号。
  • User-Agent:客户端浏览器的类型及版本。
  • Accept:指定客户端可接受的响应类型(如文本、HTML、JSON等)。
  • Content-Type:指定请求体数据的类型(如 application/jsonapplication/x-www-form-urlencoded 等)。
  • Authorization:包含身份验证信息(如 Basic 或 Bearer token)。
  • Accept-Encoding:指定客户端支持的压缩算法,如 gzip

示例请求头:

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

1.3 空行

请求头和请求体之间有一个空行,用来分隔头部和正文。空行是必需的。

1.4 请求体(可选)

请求体是请求报文中的可选部分,包含了客户端发送给服务器的数据。例如,提交表单时,表单数据会放在请求体中。对于 GET 请求,一般没有请求体;而 POST 请求通常会包含请求体,特别是当提交数据时。

示例:

{
    "username": "john_doe",
    "password": "123456"
}

2. HTTP响应报文

HTTP 响应报文是服务器返回给客户端的数据,包含了服务器处理请求后的状态信息和所请求的资源。响应报文的基本结构如下:

状态行
响应头
空行
响应体(可选)

2.1 状态行

状态行是响应报文的第一行,包含了 HTTP协议版本状态码状态描述,它的格式为:

HTTP版本 状态码 状态描述
  • HTTP协议版本:指定使用的 HTTP 协议版本,常见的有 HTTP/1.1HTTP/2
  • 状态码:服务器处理请求的结果,用三位数字表示。状态码分为五类:
    • 1xx(信息性状态码):表示请求已接收,正在处理中。
    • 2xx(成功状态码):表示请求已成功处理。
    • 3xx(重定向状态码):表示需要进一步的操作来完成请求。
    • 4xx(客户端错误状态码):表示请求错误,客户端可能需要修改请求。
    • 5xx(服务器错误状态码):表示服务器错误,服务器未能完成请求。

常见的状态码包括:

  • 200 OK:请求成功。
  • 301 Moved Permanently:资源永久移动。
  • 404 Not Found:请求的资源未找到。
  • 500 Internal Server Error:服务器内部错误。

示例:

HTTP/1.1 200 OK

2.2 响应头

响应头包含了服务器返回的关于响应的信息。每个头部字段由 字段名字段值 组成。常见的响应头包括:

  • Content-Type:指定响应体的类型(如 text/htmlapplication/json 等)。
  • Content-Length:指定响应体的字节长度。
  • Location:在重定向响应中,指定新资源的 URI。
  • Cache-Control:控制缓存策略。
  • Set-Cookie:设置客户端的 Cookie。
  • Server:指定服务器的名称和版本信息。

示例响应头:

Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Cache-Control: no-cache
Server: Apache/2.4.29 (Ubuntu)

2.3 空行

响应头和响应体之间的空行与请求报文相同,表示头部和正文的分隔。

2.4 响应体(可选)

响应体包含了服务器返回的实际数据,可能是网页的 HTML 内容、图片、JSON 数据等。例如,GET 请求的响应体可能是网页的 HTML 内容,POST 请求的响应体可能是一个状态确认消息。

示例:

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

3. HTTP请求报文和响应报文的对比

特性HTTP请求报文HTTP响应报文
请求行/状态行请求行包含请求方法、目标资源、协议版本状态行包含协议版本、状态码和状态描述
请求头/响应头包含请求相关的信息(如 Host, User-Agent)包含响应相关的信息(如 Content-Type, Server)
请求体/响应体请求体通常包含提交的数据(如表单数据)响应体通常包含请求的资源或错误信息
空行请求头和请求体之间有一个空行响应头和响应体之间有一个空行

4. 总结

  • HTTP请求报文:由客户端发送给服务器,包含请求方法、请求目标、协议版本、请求头和请求体。它用于向服务器发送请求并可能包含数据(如表单数据)。
  • HTTP响应报文:由服务器返回给客户端,包含协议版本、状态码、状态描述、响应头和响应体。它用于返回请求的结果及相关资源。

HTTP 报文的结构通过请求行、头部、空行和体部分清晰地划分了各类信息,确保客户端与服务器之间的通信高效且规范。通过这种结构,HTTP 能够支持广泛的应用场景,尤其是在 Web 浏览器与 Web 服务器之间的通信中。


标题:http报文详解
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/01/06/1736153380315.html
联系:scotttu@163.com