Skip to content

什么是 HTTP ​

Hyper Text Transfer Protocol,超文本传输协议,规定了客户端和服务器之间数据传输的规则。

只有在请求及响应中都遵循了统一的规则,服务端才能读懂客户端发送来的请求,客户端才能解析服务端响应的结果。

三大特点 ​

特点含义
基于文本的协议请求和响应部分的协议内容为文本格式,底层通过 TCP 协议传输,稳定性强
基于请求-响应模型一次请求对应一次响应,必须由客户端先发起请求,服务端才会返回响应
无状态服务端不会记忆与客户端的历史交互信息,每次请求-响应都是独立的

IMPORTANT

"无状态"这一条是理解 AI 会话记忆的关键:AI 大模型的交互同样是无状态的,模型本身没有记忆,所谓"记得上一句"是客户端把历史消息一起发过去了。详见 实战-AI智能伴侣-会话记忆。

请求数据格式 ​

一次 HTTP 请求由三部分组成:

部分内容
请求行请求方式、资源路径、协议
请求头格式为 key: value
请求体请求参数部分,GET 方式没有,POST 可以有

下面是抓到的真实请求数据(一个 POST 请求的完整报文):

HTTP 请求报文示例

对照着看三部分在哪:

  • POST /api/courses HTTP/1.1 是请求行:请求方式是 POST,资源路径是 /api/courses,协议版本 HTTP/1.1
  • 中间一串 key: value(Host、Content-Type、User-Agent 等)是请求头
  • 最后一行是请求体,这里放的是 JSON 格式的请求参数

GET 与 POST 的区别 ​

对比项GETPOST
参数位置在请求行中,没有请求体在请求体中
示例/api/courses?name=Python&status=1请求体里放 JSON 等数据
大小限制浏览器中请求参数大小有限制请求大小没有限制

响应数据格式 ​

部分内容
响应行协议、状态码
响应头格式为 key: value
响应体存放服务端响应的数据

这是上面对应的真实响应数据:

HTTP 响应报文示例

  • HTTP/1.1 200 是响应行:协议版本 + 状态码 200(请求成功)
  • 中间是响应头(Server、Date、Content-Type 等)
  • 最后是响应体:{code: 1, msg: "success", data: null}

常见状态码 ​

状态码含义
200客户端请求成功
400请求参数错误
404请求资源不存在,url 输入有误,或者网站资源被删除了
500服务器发生了不可预期的错误

TIP

排查调用大模型接口报错的顺序:先看状态码。400 多半是请求体写错(例如 JSON 的 key 没加双引号、model 名字写错),401 说明 API Key 没带上或已失效,404 说明 url 写错了。

小结(复习自测) ​

题目答案
请求格式请求行(请求方式、资源路径)、请求头(key:value)、请求体(POST 方式才有)
响应格式响应行(状态码)、响应头(key:value)、响应体
HTTP 的特点基于文本的协议、基于请求响应模型、无状态

相关 ​

练习题 ​

一、知识回顾(读完直接做下面的实践题) ​

  1. HTTP 全称 Hyper Text Transfer Protocol,中文是超文本传输协议
  2. HTTP 三大特点:基于文本的协议、基于请求-响应模型、无状态
  3. 请求格式三部分:请求行(请求方式、资源路径、协议)、请求头(key: value 格式)、请求体
  4. 响应格式三部分:响应行(协议、状态码)、响应头、响应体
  5. GET 的请求参数在请求行里;POST 的参数在请求体里
  6. 状态码:200 = 请求成功;400 = 请求参数错误;404 = 请求资源不存在;500 = 服务器发生不可预期的错误
  7. HTTPS 的默认端口是 443
  8. 请求头的格式是 key: value;调用大模型接口时 401 多半是 Authorization 没带(格式为 Bearer <API Key>,Bearer 后有一个空格)或 Key 已失效

二、概念自测 ​

  • - 提示(先自己想,实在想不出再点开)

    一级 · 思路:先解释"服务端不记历史",再反推:模型也记不住,那"记得上一句"只能是谁做的

    - 参考答案(做完再点开)

    2-1 服务端不会记住与客户端的历史交互,每次请求-响应都是独立的。AI 大模型也一样没有记忆,所以"会话记忆"只能由客户端把历史消息一起发过去(会话历史滚雪球)。

  • - 提示(先自己想,实在想不出再点开)

    一级 · 思路:按"第一行看请求方式、中间一片 key: value、最后一块是参数"的顺序在图里从上往下找

    - 参考答案(做完再点开)

    2-2 第一行 POST /api/courses HTTP/1.1 是请求行;中间一串 key: value 是请求头;最后一行是请求体(这里是 JSON 参数)。

  • - 提示(先自己想,实在想不出再点开)

    一级 · 思路:401 表示"未认证/没通过身份校验",去请求头里找那个代表身份的字段

    - 参考答案(做完再点开)

    2-3 请求头里的 Authorization:要么没带(格式应为 Bearer <API Key>,注意 Bearer 和空格),要么 API Key 已失效/写错。