首页 / 知识库 / 0基础入门-阅读资料 / 0基础-网络协议入门

第四章:HTTP 协议——应用层的通用语言

HTTP 是你在 AI 应用开发中最直接打交道的协议。

调用 API、访问网页、上传文件、获取数据——全都是 HTTP。

本章是全教程的重点章节,请认真阅读。


4.1 HTTP 是什么?

HTTP,全称 HyperText Transfer Protocol(超文本传输协议)。

虽然名字里有”超文本”,但实际上 HTTP 可以传输任何数据——文本、图片、视频、JSON ……

核心特点

特点说明类比
基于 TCPHTTP 消息通过 TCP 连接传输信通过快递送
请求-响应模式客户端发请求,服务器回响应你问我答
无状态每次请求都是独立的,服务器不记住你每次都要重新自我介绍

一句话理解

HTTP 定义了”你怎么向服务器提问”和”服务器怎么回答你”的格式。


4.2 HTTP 请求——你发出去的消息

每个 HTTP 请求由三部分组成:

┌─────────────────────────────────────────────────────┐
│  ① 请求行(Request Line)                              │
│     POST /v1/chat/completions HTTP/1.1               │
├─────────────────────────────────────────────────────┤
│  ② 请求头(Headers)                                   │
│     Host: api.openai.com                             │
│     Authorization: Bearer sk-abc123...               │
│     Content-Type: application/json                   │
│     User-Agent: python-requests/2.31.0               │
├─────────────────────────────────────────────────────┤
│  ③ 请求体(Body)                                      │
│     {                                                │
│       "model": "gpt-4",                              │
│       "messages": [                                  │
│         {"role": "user", "content": "你好"}           │
│       ]                                              │
│     }                                                │
└─────────────────────────────────────────────────────┘

① 请求行

请求行包含三个信息:

POST   /v1/chat/completions   HTTP/1.1
 │              │                  │
 │              │                  └── 协议版本
 │              └── 路径(要访问服务器的哪个接口)
 └── 方法(要做什么操作)

② 请求头(Headers)

请求头是一系列 Key: Value 格式的附加信息,告诉服务器更多细节:

常见请求头作用示例
Host要访问的服务器域名api.openai.com
Authorization身份认证信息Bearer sk-abc123...
Content-Type请求体的数据格式application/json
User-Agent客户端信息python-requests/2.31.0
Accept期望的响应格式application/json

在 AI 开发中,最重要的两个请求头是 Authorization(API Key)和 Content-Type(数据格式)。

③ 请求体(Body)

请求体就是你要发送的实际数据。调用 AI API 时,请求体通常是 JSON 格式

{
  "model": "gpt-4",
  "messages": [
    {"role": "system", "content": "你是一个有帮助的助手"},
    {"role": "user", "content": "帮我写一首诗"}
  ],
  "temperature": 0.7
}

注意:GET 请求通常没有请求体,数据放在 URL 参数里。POST 请求才有请求体。


4.3 HTTP 请求方法——你要做什么操作

HTTP 定义了多种方法,最常用的有四种:

四种核心方法

方法含义类比有请求体吗常见场景
GET获取数据去图书馆借书通常没有打开网页、查询信息
POST提交/创建数据去邮局寄包裹✅ 有登录、调用 AI API
PUT更新(替换)数据把旧书换成新版✅ 有修改用户资料
DELETE删除数据把书从书架上拿走通常没有删除一条记录

实际例子

GET    /users/123              → 获取 123 号用户的信息
POST   /v1/chat/completions    → 向 AI 发送对话请求
PUT    /users/123              → 更新 123 号用户的信息
DELETE /users/123              → 删除 123 号用户

AI 开发中最常用的

90% 的场景只用两个方法:

GET  → 获取信息(查看模型列表、获取任务状态等)
POST → 提交请求(调用 AI 模型、上传文件等)

4.4 HTTP 响应——服务器的回答

服务器收到请求后,会返回一个 HTTP 响应,同样由三部分组成:

┌─────────────────────────────────────────────────────┐
│  ① 状态行(Status Line)                               │
│     HTTP/1.1 200 OK                                  │
├─────────────────────────────────────────────────────┤
│  ② 响应头(Headers)                                   │
│     Content-Type: application/json                   │
│     X-Request-Id: req_abc123                         │
│     X-RateLimit-Remaining: 99                        │
├─────────────────────────────────────────────────────┤
│  ③ 响应体(Body)                                      │
│     {                                                │
│       "id": "chatcmpl-abc123",                       │
│       "choices": [{                                  │
│         "message": {                                 │
│           "role": "assistant",                       │
│           "content": "你好!有什么我可以帮助你的?"      │
│         }                                            │
│       }]                                             │
│     }                                                │
└─────────────────────────────────────────────────────┘

① 状态行

HTTP/1.1   200   OK
   │        │     │
   │        │     └── 状态描述(给人看的)
   │        └── 状态码(给程序看的)
   └── 协议版本

② 响应头

常见响应头作用示例
Content-Type响应体的数据格式application/json
Content-Length响应体的大小(字节)1234
X-RateLimit-Remaining剩余调用次数99
X-Request-Id请求唯一标识(排查问题用)req_abc123

③ 响应体

服务器返回的实际数据。调用 AI API 时,通常是 JSON 格式的结果。


4.5 HTTP 状态码——必须记住的”暗号”

状态码是一个三位数,告诉你请求的结果。分为 5 大类:

五大分类

范围含义记忆口诀
1xx信息性(处理中)“知道了,稍等”
2xx成功“搞定了”
3xx重定向“去别的地方找”
4xx客户端错误“你的问题”
5xx服务器错误“我的问题”

快速判断:4xx 是你的错,5xx 是服务器的错。

必须记住的状态码

200 OK —— 成功

含义:请求成功,一切正常
场景:API 调用成功,拿到了 AI 的回答
心态:😊 开心,代码没问题

400 Bad Request —— 请求有误

含义:你发的请求格式有问题,服务器看不懂
常见原因:
  - JSON 格式错误(少了引号、多了逗号)
  - 缺少必填参数
  - 参数类型不对(该传数字传了字符串)
排查:仔细检查请求体的 JSON 格式和参数

401 Unauthorized —— 未授权

含义:你没有提供有效的身份信息
常见原因:
  - 没带 API Key
  - API Key 写错了
  - API Key 过期了
排查:检查 Authorization 请求头

403 Forbidden —— 禁止访问

含义:服务器知道你是谁,但你没有权限
常见原因:
  - API Key 没有对应功能的权限
  - 账户被封禁
  - IP 被限制
排查:检查账户状态和权限设置

404 Not Found —— 找不到

含义:你要访问的资源不存在
常见原因:
  - URL 路径拼写错误
  - API 版本号不对
  - 接口已下线
排查:仔细核对 URL

429 Too Many Requests —— 请求太多

含义:你调用太频繁了,超过了速率限制
常见原因:
  - 短时间内发了太多请求
  - 超过了套餐的调用额度
排查:降低调用频率,加入延时或重试逻辑

500 Internal Server Error —— 服务器内部错误

含义:服务器自己出了问题
常见原因:
  - 服务器 bug
  - 服务器过载
  - 依赖的服务挂了
排查:不是你的问题,等一会儿重试,或联系服务提供商

状态码速查口诀

200 成功别高兴太早(还得看响应内容)
400 你的请求写错了
401 密码钥匙没带对
403 有钥匙但没权限
404 地址写错找不到
429 调太快被限流
500 服务器自己炸了

4.6 一个完整的 HTTP 交互示例

用调用 OpenAI API 作为例子,展示完整的请求和响应:

请求

POST /v1/chat/completions HTTP/1.1
Host: api.openai.com
Authorization: Bearer sk-abc123456789
Content-Type: application/json

{
  "model": "gpt-4",
  "messages": [
    {"role": "user", "content": "用一句话解释什么是 TCP"}
  ]
}

响应

HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_abc123

{
  "id": "chatcmpl-xyz789",
  "object": "chat.completion",
  "model": "gpt-4",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "TCP 是一种确保数据在网络中完整、有序、可靠传输的通信协议。"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 18,
    "completion_tokens": 30,
    "total_tokens": 48
  }
}

对应到 Python 代码

import requests

# 发送请求
response = requests.post(
    url="https://api.openai.com/v1/chat/completions",
    headers={
        "Authorization": "Bearer sk-abc123456789",
        "Content-Type": "application/json"
    },
    json={
        "model": "gpt-4",
        "messages": [
            {"role": "user", "content": "用一句话解释什么是 TCP"}
        ]
    }
)

# 检查状态码
if response.status_code == 200:
    result = response.json()
    answer = result["choices"][0]["message"]["content"]
    print(f"AI 回答:{answer}")
else:
    print(f"请求失败,状态码:{response.status_code}")
    print(f"错误信息:{response.text}")

4.7 URL 的结构

每次发 HTTP 请求都要指定一个 URL,我们来拆解一下它的结构:

https://api.openai.com:443/v1/chat/completions?model=gpt-4&stream=true
  │         │           │          │                    │
  │         │           │          │                    └── 查询参数(Query Parameters)
  │         │           │          └── 路径(Path)
  │         │           └── 端口(Port,HTTPS 默认 443 可省略)
  │         └── 域名(Host)
  └── 协议(Schema)
部分示例说明
协议https用什么协议通信
域名api.openai.com服务器的地址
端口443(通常省略)服务器的端口
路径/v1/chat/completions要访问的具体接口
查询参数?model=gpt-4&stream=true附加参数(GET 请求常用)

4.8 HTTP vs HTTPS

区别

对比项HTTPHTTPS
全称HyperText Transfer ProtocolHTTP Secure
端口80443
加密❌ 明文传输✅ SSL/TLS 加密
安全性数据可被窃听、篡改数据加密,安全可靠
现状几乎已淘汰所有正规网站和 API 都用

类比

HTTP  = 明信片 → 内容写在外面,谁都能看
HTTPS = 密封信 → 内容加密封装,只有收件人能看

对你的影响

  • 调用 AI API 时,URL 一定是 https:// 开头
  • 如果你写成 http://,大概率会连不上或被拒绝
  • 不需要深入了解 SSL/TLS 的原理,知道”HTTPS = 加密的 HTTP”即可

4.9 HTTP 版本简介

版本发布年份特点你需要知道的
HTTP/1.01996每次请求都建新连接已淘汰
HTTP/1.11997支持连接复用(Keep-Alive)目前仍广泛使用
HTTP/22015多路复用、头部压缩主流 API 基本都支持
HTTP/32022基于 UDP(QUIC),更快逐渐普及中

你不需要关心版本细节,浏览器和 HTTP 库会自动选择最优版本。


本章小结

  1. HTTP 定义了请求和响应的格式,是 AI 开发中最常用的协议
  2. 请求 = 请求行 + 请求头 + 请求体
  3. 响应 = 状态行 + 响应头 + 响应体
  4. 方法:GET(获取)、POST(提交)最常用
  5. 状态码:200 成功、4xx 你的错、5xx 服务器的错
  6. HTTPS = HTTP + 加密,现在都用 HTTPS
  7. URL = 协议 + 域名 + 端口 + 路径 + 参数

记住核心:调用 AI API = 发一个 HTTP POST 请求,拿一个 HTTP 响应。

下一章,我们把 TCP 和 HTTP 串起来,看看调用 AI API 时,从头到尾到底发生了什么。


← 上一章:TCP 协议 | 下一章:实战串联 →