HTTP协议之请求报文与响应报文

请求报文

HTTP 请求报文由三部分组成:请求行、请求头、请求体

基本结构

请求行
请求头1: 值1
请求头2: 值2
...
(空行,分隔请求头和请求体)
请求体(可选)

各部分详解

1. 请求行(Request Line)

包含三个信息:请求方法请求 URLHTTP 协议版本,用空格分隔。

格式:

Method Request-URI HTTP-Version

示例:

GET /api/users HTTP/1.1
POST /api/login HTTP/1.1

常见请求方法:

  • GET:获取资源(无请求体)
  • POST:提交数据(有请求体)
  • PUT:更新资源
  • DELETE:删除资源
  • PATCH:部分更新资源
2. 请求头(Request Headers)

由键值对组成,描述请求的元数据(如客户端信息、接受的数据类型等)。

常见请求头:

  • Host:服务器域名和端口(必需)
  • User-Agent:客户端浏览器/设备信息
  • Accept:客户端可接受的响应数据类型(如 application/json
  • Content-Type:请求体的数据类型(如 application/jsonmultipart/form-data
  • Authorization:身份验证信息(如 Bearer token
  • Cookie:客户端存储的 Cookie 信息
3. 请求体(Request Body)

可选部分,仅在 POSTPUT 等方法中使用,用于传递数据(如表单数据、JSON 等)。

示例:

  • JSON 格式:
    {"username": "admin", "password": "123456"}
    
  • 表单格式(application/x-www-form-urlencoded):
    username=admin&password=123456
    

完整请求报文示例

GET 请求(无请求体)
GET /api/users?page=1&limit=10 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/96.0.4664.110
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
POST 请求(带 JSON 体)
POST /api/login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/96.0.4664.110
Accept: application/json
Content-Type: application/json
Content-Length: 45

{"username": "admin", "password": "123456"}
POST 表单请求
POST /api/register HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/96.0.4664.110
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 35

username=test&email=test@example.com

关键点

  • 各部分之间用 换行符(\r\n) 分隔
  • 请求头与请求体之间必须有一个 空行
  • Content-Length 头指定请求体的字节长度
  • Content-Type 需与请求体格式一致,否则服务器可能无法正确解析
    HTTP 响应报文是服务器对客户端请求的回应,它由三部分组成:状态行(Status Line)响应头(Response Headers)响应体(Response Body)

响应报文

响应报文结构

状态行
响应头1: 值1
响应头2: 值2
...
(空行,分隔响应头和响应体)
响应体(可选)

各部分详解

1. 状态行

包含三个信息:HTTP 协议版本状态码状态描述,用空格分隔。

格式:

HTTP-Version Status-Code Reason-Phrase

示例:

HTTP/1.1 200 OK
HTTP/1.1 404 Not Found

状态码分类

  • 1xx(信息):请求已接收,继续处理(如 100 Continue
  • 2xx(成功):请求已成功处理(如 200 OK201 Created
  • 3xx(重定向):需要进一步操作完成请求(如 301 Moved Permanently302 Found
  • 4xx(客户端错误):请求有错误(如 400 Bad Request401 Unauthorized404 Not Found
  • 5xx(服务器错误):服务器处理请求出错(如 500 Internal Server Error503 Service Unavailable
2. 响应头

由键值对组成,描述响应的元数据(如服务器信息、响应数据类型等)。

常见响应头:

  • Server:服务器软件信息(如 nginx/1.21.4
  • Content-Type:响应体的数据类型(如 application/jsontext/html
  • Content-Length:响应体的字节长度
  • Date:服务器响应时间
  • Set-Cookie:服务器向客户端设置 Cookie
  • Cache-Control:缓存控制策略(如 max-age=3600
  • Access-Control-Allow-Origin:跨域资源共享(CORS)配置
3. 响应体

可选部分,包含服务器返回的实际数据(如 HTML 页面、JSON 数据、图片等)。

示例:

  • JSON 格式(接口响应常见):
    {
      "code": 200,
      "message": "success",
      "data": {
        "id": 1,
        "name": "John Doe"
      }
    }
    
  • HTML 格式(网页响应):
    <!DOCTYPE html>
    <html>
      <head><title>Example</title></head>
      <body><h1>Hello World</h1></body>
    </html>
    

完整响应报文示例

成功响应(200 OK)
HTTP/1.1 200 OK
Server: nginx/1.21.4
Date: Wed, 30 Jul 2025 08:30:00 GMT
Content-Type: application/json
Content-Length: 88
Cache-Control: no-cache

{
  "code": 200,
  "message": "请求成功",
  "data": {"username": "admin", "role": "superuser"}
}
客户端错误响应(404 Not Found)
HTTP/1.1 404 Not Found
Server: Apache/2.4.41
Date: Wed, 30 Jul 2025 08:35:00 GMT
Content-Type: text/html
Content-Length: 152

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>
服务器错误响应(500 Internal Server Error)
HTTP/1.1 500 Internal Server Error
Server: Tomcat/9.0.58
Date: Wed, 30 Jul 2025 08:40:00 GMT
Content-Type: text/plain
Content-Length: 34

Internal Server Error: Database connection failed

关键点

  • 与请求报文类似,各部分用 换行符(\r\n) 分隔
  • 响应头与响应体之间必须有一个 空行
  • Content-Type 决定了客户端如何解析响应体(如 JSON 需要解析为对象,HTML 需要渲染为页面)
  • 状态码是判断请求是否成功的核心依据,配合响应体中的业务码(如 code: 200)可更精准处理结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值