一、HTTP协议基础
1.概念
HTTP :超文本传输协议,基于TCP 、无状态、应用层协议,默认端口 80 ;HTTPS 加密版默认端口 443。
- 无状态:服务端不记录客户端历史请求,靠 Cookie/Session/Token 维持会话。
- 版本区别:
- HTTP/1.1:主流,支持长连接、缓存、Host 头
- HTTP/2:二进制帧、多路复用、头部压缩
- HTTP/3:基于 QUIC (UDP),低延迟、抗网络抖动
2.请求方法
| 方法 | 作用 | 幂等性 | 使用场景 |
|---|---|---|---|
| GET | 查询资源,参数拼在 URL | 幂等 | 浏览页面、查询接口 |
| POST | 提交数据、创建资源 | 非幂等 | 注册、发帖、表单提交 |
| PUT | 全量更新资源 | 幂等 | 修改整条数据 |
| DELETE | 删除资源 | 幂等 | 删除数据 |
| PATCH | 局部更新资源 | 非幂等 | 只修改部分字段 |
注:GET 和 POST 区别?
- 语义:GET 查询、POST 提交 / 创建;
- 数据位置:GET 参数拼接 URL,POST 放请求体;
- 缓存:GET 默认被浏览器缓存,POST 默认不缓存;
- 幂等性:GET 幂等,POST 非幂等;
- 长度限制:GET 受 URL 长度限制(浏览器 / 服务器限制),POST 无硬性限制;
- 书签 / 历史:GET 可收藏,POST 不行;
- 安全:都为明文,GET 参数暴露在地址栏,相对更不安全
3.状态码
-
1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误。
-
重点状态码:
204 No Content:成功无响应体,常用于删除接口;301/302/307/308区别:永久 / 临时重定向、是否保留请求方法;304 Not Modified:协商缓存命中,关联缓存机制;401 vs 403:401 未认证(未登录 / 无 token),403 已认证但权限不足;404/405/408/409场景:资源不存在、请求方法不允许、请求超时、资源冲突;500/502/503/504(线上故障核心 )- 500:应用代码异常、业务报错;
- 502 Bad Gateway:网关/代理(Nginx)收到后端无效响应,后端服务宕机 / 崩溃;
- 503 Service Unavailable:服务不可用(限流、宕机、维护、过载);
- 504 Gateway Timeout:网关超时,后端接口执行太慢。
二、工作原理

1. 完整通信流程
HTTP 是应用层协议 ,基于 TCP 传输,采用客户端 - 服务端(C/S)模型、请求 - 应答模式、无状态通信。
(1) 依赖的底层协议------传输层TCP(HTTP/1.x 标配)
HTTP 本身不负责传输数据 ,只定义数据格式和交互规则,真正传输靠 TCP
- TCP 是面向连接、可靠、字节流协议,传输前必须建立连接。
- 默认端口:HTTP 80, HTTPS(HTTP+TLS 加密)443
- 核心保障:丢包重传、顺序重组、拥塞控制,保证 HTTP 报文完整送达。
补充:HTTP/3 改用 QUIC(基于 UDP),牺牲部分传统可靠机制,换取低延迟、抗弱网。
(2) 核心特性:无状态
- 定义:服务端不会记录客户端的上一次请求信息,每一次 HTTP 请求都是独立的。
- 问题:无法识别同一用户(比如登录后刷新页面又要重登)。
- 解决方案:
Cookie、Session、Token、JWT 等会话技术。
(3) 完整通信流程
以浏览器访问网页为例,完整链路从「输入网址」到「页面展示」全过程:
步骤 1:DNS 域名解析
浏览器输入域名(如 www.baidu.com),域名无法直接用于 TCP 连接,需要解析为IP 地址:
- ① 先查浏览器缓存 → 系统缓存 → 本地 hosts 文件
- ② 未命中则向DNS 服务器发起查询
- ③ 最终拿到目标服务器 IP
步骤 2:TCP 三次握手,建立连接
客户端(浏览器)和服务端通过 TCP 建立可靠连接(HTTP/1.1 默认长连接):
- 三次握手目的:双方确认收发能力正常,建立通信通道。
- 连接建立后,通道可复用(长连接),不用每次请求都重连。
步骤 3:客户端构造 & 发送 HTTP 请求报文
浏览器按照 HTTP 协议规则,组装请求报文,通过 TCP 通道发给服务端。
请求报文有四部分:
- 请求行 :请求方法 + 资源路径 + 协议版本。如
GET /index.html HTTP/1.1 - 请求头(Request Headers) :客户端附加信息。如
Host(目标域名)、User-Agent(浏览器 / 设备)、Cookie、Content-Type、缓存字段等。 - 空行:分隔请求头与请求体(协议强制)
- 请求体(Body):仅 POST/PUT/PATCH 等方法使用,存放提交的表单、JSON、文件等数据。
步骤 4:服务端接收 & 处理请求
- Web 服务器(Nginx/Apache/Tomcat)监听 80/443 端口,接收报文。
- 解析请求行、请求头、请求体,识别:请求方法、访问路径、客户端身份、参数。
- 业务层处理:查询数据库、执行接口逻辑、读取静态文件等。
步骤 5:服务端构造 & 返回 HTTP 响应报文
处理完成后,服务端组装响应报文回传给客户端,结构同样分四部分:
- 状态行 :协议版本 + 状态码 + 状态描述 示例:
HTTP/1.1 200 OK - 响应头(Response Headers) :服务端附加信息。如:
Server、Set-Cookie、Cache-Control、Content-Type、跨域配置等 - 空行:分隔响应头与响应体
- 响应体(Body):核心数据,HTML、CSS、JS、JSON、图片、视频等资源
步骤 6:客户端解析响应,渲染页面
- 浏览器解析状态码:判断请求是否成功、是否需要重定向。
- 解析响应体:
- 若是 HTML:逐行解析,再依次请求页面内引用的 CSS、JS、图片等静态资源(每个资源单独发起 HTTP 请求)。
- 若是 JSON:交给前端 JS 逻辑处理。
- 最终渲染出完整页面。
步骤 7:TCP 四次挥手,断开连接
- 短连接(HTTP/1.0 默认):一次请求响应完成,立即四次挥手断开 TCP 连接。
- 长连接(HTTP/1.1 默认):连接会保留一段时间,复用通道处理多个请求;空闲超时后,双方四次挥手断开连接。
2.长连接 & 短连接(HTTP 核心交互模式)
(1) 短连接(HTTP/1.0)
- 规则:一次请求 → 一次响应 → 立即断开 TCP。
- 缺点:频繁建立 / 断开 TCP(三次握手 + 四次挥手),开销大,访问多资源时性能差。
(2) 长连接(HTTP/1.1 主流)
- 标识:请求头 / 响应头携带
Connection: keep-alive - 规则:TCP 连接建立后,在超时时间内可连续传输多个 HTTP 请求 / 响应,不用重复建连。
- 超时机制:服务端默认设置空闲超时(一般几秒~几十秒),无新请求则自动断开。
- 优势:大幅减少 TCP 握手开销,提升访问速度。
(3) 管线化(HTTP/1.1 附加能力)
长连接下,客户端可连续发送多个请求 ,不用等上一个响应返回;但服务端必须按请求顺序返回响应,存在队头阻塞问题。
3. HTTPS 工作原理(HTTP + 安全层)
HTTP 明文传输,数据易被窃听、篡改、劫持,HTTPS 在 HTTP 和 TCP 之间增加 TLS/SSL 加密层:
- 端口:443
- 核心流程:
- ①TCP 三次握手建立连接。
- ②TLS 握手:协商加密算法、交换公钥、验证证书合法性(防伪造)。
- ③双方使用对称加密传输 HTTP 报文(加密后密文,无法窃听篡改)。
- ④通信结束,断开 TLS + TCP 连接。
- 特点:安全,但比纯 HTTP 多一次 TLS 握手,略微增加延迟
4. 主流版本核心差异(原理层面)
HTTP/1.0:
- 默认短连接,无统一缓存规范,不支持 Host 头。
- 一个 TCP 连接只处理一个请求。
HTTP/1.1(目前最广泛):
- 默认长连接,完善缓存机制、状态码、请求头。
- 支持管线化,但存在队头阻塞(一个请求慢,后面全部阻塞)。
HTTP/2:
- 改用二进制帧传输(替代文本格式),解析更快。
- 多路复用:一个 TCP 连接并行处理多个请求,彻底解决队头阻塞。
- 头部压缩、服务器主动推送资源。
HTTP/3:
- 底层抛弃 TCP,使用 QUIC 协议(UDP)。
- 0-RTT 握手、连接迁移、彻底解决 TCP 层队头阻塞,弱网 / 移动网络体验最优。
5. 无状态的落地实现
前面提到 HTTP 无状态,行业主流解决方案:
- Cookie :存储在客户端浏览器 ,由服务端通过
Set-Cookie下发,每次请求自动携带。 - Session :数据存在服务端,客户端只存一个 SessionID(一般放在 Cookie 里)。
- Token/JWT:令牌串,客户端存储,请求头手动携带,适合前后端分离、跨端、分布式服务