HTTP 协议
HTTP(超文本传输协议)是 Web 世界的通用语言:浏览器取网页、前后端调接口、RESTful API 通信都以它为基础。后端面试关于请求方法、状态码、无状态会话的问题几乎必考,掌握报文结构是阅读一切网络日志的起点。
HTTP 是什么
- 基于 TCP 的应用层协议,默认端口 80(HTTPS 为 443)。
- 采用请求—响应模型:客户端发请求,服务器回响应。
- 无状态:服务器默认不记忆每次请求的上下文,状态靠 Cookie / Session / Token 补充。
请求报文结构
POST /api/login HTTP/1.1 ← 请求行: 方法 路径 版本
Host: www.example.com ← 请求头(键值对)
Content-Type: application/json
Content-Length: 32
← 空行(分隔头与体)
{"user":"alice","pwd":"123"} ← 请求体(POST 携带数据)
响应报文结构
HTTP/1.1 200 OK ← 状态行: 版本 状态码 短语
Content-Type: text/html; charset=utf-8
Content-Length: 1024 ← 响应头
← 空行
<html>…</html> ← 响应体
报文的整体轮廓可记成:起始行 + 头部 + 空行 + 主体。
常用请求方法
| 方法 | 语义 | 是否幂等 | 典型用途 |
|---|---|---|---|
| GET | 获取资源 | 是 | 查询列表、打开页面 |
| POST | 提交数据/创建 | 否 | 登录、下单、新增记录 |
| PUT | 整体更新/替换 | 是 | 覆盖更新资源 |
| PATCH | 局部更新 | 否 | 只改部分字段 |
| DELETE | 删除资源 | 是 | 删除记录 |
高频辨析:GET 参数放 URL、可被缓存、有长度限制;POST 参数放请求体、相对私密、默认不缓存。实际"GET 能否带 body"等细节常被追问,建议结合规范理解而非死记。
状态码分类
| 分类 | 含义 | 常见例子 |
|---|---|---|
| 1xx | 信息提示 | 100 Continue |
| 2xx | 成功 | 200 OK、201 Created、204 无内容 |
| 3xx | 重定向 | 301 永久、302 临时、304 未修改 |
| 4xx | 客户端错误 | 400 参数错、401 未认证、403 无权限、404 不存在 |
| 5xx | 服务端错误 | 500 内部错、502 网关错、503 服务不可用 |
记忆口诀:1 消息、2 成功、3 重定向、4 客户端、5 服务端。排障第一步永远是看状态码落在哪个区间。
无状态如何保持会话
- Cookie:服务器经
Set-Cookie下发标识,浏览器后续请求自动携带。 - Session:会话数据存服务器内存/缓存,仅以 sessionId 关联客户端。
- Token / JWT:把身份信息签名后交给客户端,服务端无状态、易横向扩展,适合分布式与前后端分离。
HTTP 版本演进
| 版本 | 主要改进 | 传输层 |
|---|---|---|
| HTTP/1.1 | 持久连接、管线化,应用最广 | TCP |
| HTTP/2 | 多路复用、头部压缩、二进制分帧 | TCP |
| HTTP/3 | 基于 QUIC,0-RTT 握手、抗丢包 | UDP |
应用场景
凡前后端接口联调、抓包排查、网关鉴权都离不开 HTTP。日常排障套路:先看状态码区间,再看响应体错误信息,最后结合请求头(如认证、Content-Type)定位问题。
小结:HTTP 是"请求—响应、无状态"的文本协议。背熟五种常用方法、状态码五类区间、Cookie/Session/Token 的区别,再亲手抓一次包,Web 调试与面试都够用了。