HTTP | HTTP报文
字数 2887 2025-08-18 11:38:45

HTTP报文详解

一、HTTP报文概述

HTTP报文是HTTP协议通信时发送的数据块,用于客户端与服务器端之间的数据交互。HTTP报文可以分为两类:

  • 请求报文:客户端向服务器发送请求
  • 响应报文:服务器对请求的回应

二、HTTP报文结构

HTTP报文由三部分组成(也有说法分为首部和主体两部分):

  1. 状态行(请求行/响应行)
  2. 首部(多个首部字段)
  3. 主体(可选)

报文格式特点:

  • 每行以回车符(\r, %0d, CR)和换行符(\n, %0a, LF)结束
  • 首部和主体之间由空行(两个CRLF)分隔
  • 状态行和首部是ASCII文本,主体可包含文本或二进制数据

三、状态行详解

1. 请求行(请求报文的状态行)

格式:请求方法 URL 协议版本
示例:GET /index.html HTTP/1.1

2. 响应行(响应报文的状态行)

格式:协议版本 状态码 原因短语
示例:HTTP/1.1 200 OK

注意:原因短语只对人类有意义,服务器可能返回不同的描述文本。

四、HTTP方法

HTTP规范定义了多种请求方法,以下是常用方法:

方法 描述
GET 获取/查询资源,参数包含在URL中
POST 传输实体主体,数据包含在请求主体中,常用于表单提交
HEAD 只获取报文首部,不返回主体,用于测试资源是否存在
OPTIONS 查询资源支持的方法
PUT 传输文件,将请求主体内容保存到URL指定位置
DELETE 删除URL指定的资源
TRACE 路径追踪,用于诊断请求是否被篡改

方法特点:

  • GET和POST是最常用的方法
  • PUT和DELETE方法不带验证机制,存在安全问题
  • 方法名称必须大写

五、HTTP状态码

HTTP状态码分为5类:

类别 描述 常见状态码
1xx 信息提示 100 Continue, 101 Switching Protocols
2xx 成功 200 OK, 201 Created, 204 No Content, 206 Partial Content
3xx 重定向 301 Moved Permanently, 302 Found, 304 Not Modified
4xx 客户端错误 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 405 Method Not Allowed
5xx 服务器错误 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

六、HTTP首部

HTTP首部由多个首部字段构成,格式为:字段名: 字段值

首部分类:

  1. 通用首部(请求和响应报文都可使用)

    • Cache-Control, Connection, Date, Pragma, Trailer, Transfer-Encoding, Upgrade, Via, Warning
  2. 请求首部(请求报文使用)

    • Accept, Accept-Charset, Accept-Encoding, Accept-Language, Authorization, Expect, From, Host, If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Max-Forwards, Proxy-Authorization, Range, Referer, TE, User-Agent
  3. 响应首部(响应报文使用)

    • Accept-Ranges, Age, ETag, Location, Proxy-Authenticate, Retry-After, Server, Vary, WWW-Authenticate
  4. 实体首部(描述实体信息)

    • Allow, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Type, Expires, Last-Modified

七、报文主体

报文主体特点:

  • 可选部分,不是所有报文都有主体
  • GET请求通常没有主体
  • POST请求的主体通常包含表单数据或上传的文件
  • 主体格式由Content-Type首部指定

八、实际应用示例

GET请求示例

GET /search?q=google HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0
Accept: text/html
(空行)

POST请求示例

POST /login.php HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

username=admin&password=123456

响应示例

HTTP/1.1 200 OK
Date: Mon, 06 May 2019 05:05:05 GMT
Server: Apache
Content-Type: text/html
Content-Length: 1234

<html>...</html>

九、注意事项

  1. 行结束符必须是CRLF(\r\n)
  2. 首部字段名不区分大小写,但约定使用首字母大写
  3. 某些方法(如PUT、DELETE)存在安全隐患,实际应用中需谨慎使用
  4. 状态码描述文本不影响实际处理结果
  5. 主体格式和编码由Content-Type和Content-Encoding首部指定
HTTP报文详解 一、HTTP报文概述 HTTP报文是HTTP协议通信时发送的数据块,用于客户端与服务器端之间的数据交互。HTTP报文可以分为两类: 请求报文 :客户端向服务器发送请求 响应报文 :服务器对请求的回应 二、HTTP报文结构 HTTP报文由三部分组成(也有说法分为首部和主体两部分): 状态行 (请求行/响应行) 首部 (多个首部字段) 主体 (可选) 报文格式特点: 每行以回车符(\r, %0d, CR)和换行符(\n, %0a, LF)结束 首部和主体之间由空行(两个CRLF)分隔 状态行和首部是ASCII文本,主体可包含文本或二进制数据 三、状态行详解 1. 请求行(请求报文的状态行) 格式: 请求方法 URL 协议版本 示例: GET /index.html HTTP/1.1 2. 响应行(响应报文的状态行) 格式: 协议版本 状态码 原因短语 示例: HTTP/1.1 200 OK 注意:原因短语只对人类有意义,服务器可能返回不同的描述文本。 四、HTTP方法 HTTP规范定义了多种请求方法,以下是常用方法: | 方法 | 描述 | |---------|----------------------------------------------------------------------| | GET | 获取/查询资源,参数包含在URL中 | | POST | 传输实体主体,数据包含在请求主体中,常用于表单提交 | | HEAD | 只获取报文首部,不返回主体,用于测试资源是否存在 | | OPTIONS | 查询资源支持的方法 | | PUT | 传输文件,将请求主体内容保存到URL指定位置 | | DELETE | 删除URL指定的资源 | | TRACE | 路径追踪,用于诊断请求是否被篡改 | 方法特点: GET和POST是最常用的方法 PUT和DELETE方法不带验证机制,存在安全问题 方法名称必须大写 五、HTTP状态码 HTTP状态码分为5类: | 类别 | 描述 | 常见状态码 | |------|--------------------------|---------------------------------------------------------------------------| | 1xx | 信息提示 | 100 Continue, 101 Switching Protocols | | 2xx | 成功 | 200 OK, 201 Created, 204 No Content, 206 Partial Content | | 3xx | 重定向 | 301 Moved Permanently, 302 Found, 304 Not Modified | | 4xx | 客户端错误 | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 405 Method Not Allowed | | 5xx | 服务器错误 | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable | 六、HTTP首部 HTTP首部由多个首部字段构成,格式为: 字段名: 字段值 首部分类: 通用首部 (请求和响应报文都可使用) Cache-Control, Connection, Date, Pragma, Trailer, Transfer-Encoding, Upgrade, Via, Warning 请求首部 (请求报文使用) Accept, Accept-Charset, Accept-Encoding, Accept-Language, Authorization, Expect, From, Host, If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Max-Forwards, Proxy-Authorization, Range, Referer, TE, User-Agent 响应首部 (响应报文使用) Accept-Ranges, Age, ETag, Location, Proxy-Authenticate, Retry-After, Server, Vary, WWW-Authenticate 实体首部 (描述实体信息) Allow, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Type, Expires, Last-Modified 七、报文主体 报文主体特点: 可选部分,不是所有报文都有主体 GET请求通常没有主体 POST请求的主体通常包含表单数据或上传的文件 主体格式由Content-Type首部指定 八、实际应用示例 GET请求示例 POST请求示例 响应示例 九、注意事项 行结束符必须是CRLF(\r\n) 首部字段名不区分大小写,但约定使用首字母大写 某些方法(如PUT、DELETE)存在安全隐患,实际应用中需谨慎使用 状态码描述文本不影响实际处理结果 主体格式和编码由Content-Type和Content-Encoding首部指定