在上篇文章当中,我们详细介绍了 TCP/IP 框架当中的传输层协议TCP。在今天这篇文章当中,我将介绍基于TCP协议的网络应用层协议HTTP协议。虽然HTTP协议如今已经有30多年的历史了,但是在现在的AI时代,你调用后端API向云端服务发送提示词并等待结果,承载这一切的协议就是HTTP协议,它仍然是现在网络和数字世界的通用语言。
HTTP概述
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种基于 TCP/IP 协议族的应用层通信协议,最初由 Tim Berners-Lee 于 1991 年设计,用于在万维网上传输 HTML 页面与资源。经过三十余年演进,它已成为互联网上应用最广泛的应用层协议之一,它是一个客户端请求和响应的标准协议,这个协议详细规定了浏览器和万维网服务器之间相互通信的规则。
通信规则规定了客户端发给服务器的内容格式,也规定了服务器发送给客户端的内容格式,客户端发给服务器的格式叫做"请求协议",服务端发给客户端的格式叫"响应协议"。

HTTP的格式和URL

Http,URL是一种很特殊的URI(统一资源标识符),包含了用于查找某个资源足够的信息,格式如下:
http://host:「:port」/「abc」
- http表示要通过HTTP协议来定位网络资源。
- host表示合法的 internet 主机域名或者 IP 地址。
- port:指定一个端口号,为空则省略,使用 80 端口。
- ABC 指定请求资源的 URI。如果 URL 中没有给出 ABC,那么当它作为请求 URI时,必须以/的形式给出。通常这个工作浏览器会自动处理。
HTTP协议的特点
-
请求 - 响应模式
HTTP 是典型的客户端 - 服务器(C/S)架构协议:永远由客户端主动发起请求,服务器接收并处理后返回响应。没有请求就不会有响应,服务器无法主动向客户端推送数据(HTTP/2 服务器推送、WebSocket 为扩展或替代方案)。
-
无状态(Stateless)
HTTP 协议本身不记录任何客户端的历史请求信息,每一次请求都是完全独立的。服务器默认不会 "记住" 上一次请求的用户身份与操作。
这种设计简化了服务器实现,降低了资源消耗;但对于需要身份识别的场景(如登录、购物车),则通过 Cookie、Session、Token 等机制来补充状态管理 —— 这也是 AI API 使用 API Key、Authorization 头进行鉴权的底层原因。
-
可扩展性强
通过自定义消息头,HTTP 可以灵活扩展能力。从鉴权(Authorization)、内容协商(Accept)到缓存控制(Cache-Control),几乎所有新增的业务规则都可以通过头部字段实现,无需修改协议核心。AI 接口中的流式响应、速率限制等能力,也都依托 HTTP 头部完成交互。
-
明文传输与安全扩展
原生 HTTP 以明文形式传输数据,存在被窃听、篡改的风险。因此实际生产环境中几乎都使用HTTPS(HTTP over TLS/SSL),在传输层加入加密层,保障数据传输的机密性与完整性。
-
媒体类型无关(灵活)
HTTP 不限制传输的数据类型。只要通过
Content-Type声明正确的媒体类型,就可以传输文本、JSON、图片、音频、视频、二进制流等任意格式的数据 —— 这也是它能承载 AI 生成的图片、语音、流式文本等多样内容的基础。 -
无连接 无连接表示每次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后,即断开连接。采用这种方法可以节省传输时间。
HTTP的请求
一个 HTTP 请求报文由三部分构成:请求行、请求头、请求体。
(1)请求行
位于报文第一行,包含三个要素:请求方法、请求 URI、协议版本。
示例: plaintext
POST /v1/chat/completions HTTP/1.1
常见请求方法:
GET:获取资源,请求参数通常拼接在 URL 中,无请求体,幂等。POST:提交数据、创建资源,请求体携带数据,非幂等。绝大多数 AI 接口的调用都使用 POST 方法。PUT:全量更新资源,幂等。DELETE:删除指定资源。HEAD:与 GET 类似,但只返回响应头,不返回响应体,用于检查资源是否存在。OPTIONS:查询服务器支持的方法与跨域规则,常用于 CORS 预检请求。PATCH:局部更新资源。
(2)请求头(Request Headers)
由多行键值对组成,用于向服务器传递客户端的附加信息,如客户端身份、可接受的数据格式、鉴权凭证等。
(3)空行
分隔请求头与请求体。
(4)请求体(Request Body)
可选部分,用于传递提交的数据。GET/HEAD 方法没有请求体,POST/PUT 等方法通常携带。AI 接口中,请求体一般是 JSON 格式,包含提示词、模型参数、生成配置等内容。
HTTP的响应
响应报文同样由三部分构成:状态行、响应头、响应体。
(1)状态行
包含协议版本、状态码、状态描述。
示例:
plaintext
HTTP/1.1 200 OK
状态码五大分类:
-
1xx 信息性:请求已接收,继续处理。如
100 Continue。 -
2xx 成功:请求已正常处理。
200 OK:请求成功201 Created:资源创建成功206 Partial Content:范围请求成功,常用于断点续传
-
3xx 重定向:需要进一步操作才能完成请求。
301 Moved Permanently:永久重定向302 Found:临时重定向304 Not Modified:资源未修改,可使用本地缓存
-
4xx 客户端错误:请求存在问题,服务器无法处理。
400 Bad Request:请求参数错误401 Unauthorized:未认证,鉴权失败(如 API Key 错误)403 Forbidden:已认证但无权限访问404 Not Found:资源不存在429 Too Many Requests:请求过于频繁,触发限流(AI 接口常见)
-
5xx 服务器错误:服务器处理请求时发生异常。
500 Internal Server Error:服务器内部错误502 Bad Gateway:网关错误503 Service Unavailable:服务不可用504 Gateway Timeout:网关超时
(2)响应头(Response Headers)
服务器向客户端返回的附加信息,如内容类型、内容长度、缓存策略、服务器信息等。
(3)空行
分隔响应头与响应体。
(4)响应体(Response Body)
服务器返回的实际数据。AI 对话接口中通常为 JSON 格式的生成结果,流式接口则为逐段返回的数据流。
HTTP 消息头
消息头(Header)是 HTTP 协议的 "控制面板",承载了鉴权、缓存、内容协商、跨域等几乎所有扩展能力。按用途可分为四大类:
1. 通用头(General Headers)
请求与响应中都可出现,描述整体传输行为。
Connection:控制连接是否保持,如keep-alive、closeCache-Control:缓存控制策略Date:报文创建时间
2. 请求头(Request Headers)
仅出现在请求中,描述客户端的配置与需求。
Host:目标服务器的域名与端口,HTTP/1.1 必填User-Agent:客户端身份标识(浏览器、SDK 等)Accept:客户端可接受的响应内容类型,如application/jsonAccept-Encoding:可接受的压缩编码,如gzip, deflateAuthorization:鉴权凭证,AI 接口中常用来传递 API Key 或 TokenContent-Type:请求体的数据格式,如application/jsonContent-Length:请求体的字节长度Referer:该请求头指明请求从哪里来,可以用来做统计工作,广告,和防盗链
3. 响应头(Response Headers)
仅出现在响应中,描述服务器的信息与规则。
Server:服务器软件标识Content-Type:响应体的数据格式与编码Content-Length:响应体的字节长度Set-Cookie:向客户端设置 CookieAccess-Control-Allow-Origin:跨域访问许可X-RateLimit-Remaining:剩余请求次数(AI 限流接口常见)Location:Location响应报头域,用于重定向接受者到一个新的位置,常用在更换域名的时候Refresh:自动跳转单位时间是秒,可以在页面通过 meta 标签实现,也可以在后台实现
4. 实体头(Entity Headers)
描述请求体或响应体的元信息,如Content-Type、Content-Length、Content-Encoding、Last-Modified等。

