一、HTTP 协议概述
HTTP(HyperText Transfer Protocol,超文本传输协议)是 Web 通信的基础协议。 它工作在 OSI 模型的应用层,基于客户端-服务端模型,通过请求-响应模式进行通信。 HTTP/1.1 之前默认使用短连接,HTTP/1.1 起默认使用持久连接(Keep-Alive),HTTP/2 引入了多路复用,HTTP/3 则基于 QUIC(UDP)。
💡 HTTP 的本质
HTTP 本质上是一个基于 TCP 的文本协议(HTTP/2 之前)。请求和响应都是纯文本,用特定的格式组织。理解了报文格式,就理解了 HTTP 的核心。
二、HTTP 通信过程
一个完整的 HTTP 通信过程分为四步:
三、HTTP 请求报文结构
HTTP 请求报文由四部分组成:请求行、请求头部、空行、请求体。
常用请求方法
| 方法 | 语义 | 是否安全 | 幂等性 |
|---|---|---|---|
| GET | 获取资源 | 安全(不改服务器数据) | 幂等 |
| POST | 提交数据 / 创建资源 | 不安全 | 不幂等 |
| PUT | 更新资源(整体替换) | 不安全 | 幂等 |
| DELETE | 删除资源 | 不安全 | 幂等 |
| PATCH | 部分更新资源 | 不安全 | 不幂等 |
| HEAD | 获取响应头(不含 body) | 安全 | 幂等 |
| OPTIONS | 查询服务器支持的方法(CORS 预检) | 安全 | 幂等 |
💡 安全 vs 幂等
安全:不修改服务器上的资源(GET、HEAD、OPTIONS)。幂等:执行一次和执行多次的效果相同(GET、PUT、DELETE)。POST 既不安全也不幂等。
四、HTTP 响应报文结构
HTTP 响应报文同样由四部分组成:状态行、响应头部、空行、响应体。
五、HTTP 状态码
状态码用三位数字表示服务器对请求的处理结果,按首位分为五大类:
高频状态码详解
| 状态码 | 含义 | 常见场景 |
|---|---|---|
| 200 | OK | 请求成功,响应体包含请求的数据 |
| 301 | Moved Permanently | 资源永久重定向到新 URL(SEO 权重转移) |
| 302 | Found | 资源临时重定向到新 URL |
| 304 | Not Modified | 协商缓存命中,资源未修改,使用浏览器缓存 |
| 400 | Bad Request | 请求参数错误、格式不正确 |
| 401 | Unauthorized | 未认证(未登录),需要提供认证信息 |
| 403 | Forbidden | 已认证但无权限访问该资源 |
| 404 | Not Found | 请求的资源不存在 |
| 500 | Internal Server Error | 服务器内部错误(代码异常等) |
| 502 | Bad Gateway | 网关/代理从上游收到无效响应 |
| 503 | Service Unavailable | 服务暂时不可用(过载、维护中) |
| 504 | Gateway Timeout | 网关等待上游响应超时 |
六、常用 Header 字段
请求头
| Header | 说明 |
|---|---|
Host | 目标主机域名和端口(HTTP/1.1 必须字段,支持虚拟主机) |
User-Agent | 客户端标识(浏览器类型、操作系统等) |
Accept | 客户端能接收的内容类型(MIME 类型) |
Authorization | 认证信息(Bearer Token、Basic Auth 等) |
Cookie | 携带之前服务器设置的 Cookie |
Content-Type | 请求体的媒体类型(POST/PUT 请求需要) |
Referer | 当前请求的来源页面 URL |
If-None-Match | 协商缓存:携带上次响应的 ETag 值 |
响应头
| Header | 说明 |
|---|---|
Content-Type | 响应体的媒体类型和编码 |
Content-Length | 响应体字节长度 |
Set-Cookie | 设置 Cookie(可多条) |
Cache-Control | 缓存策略(max-age、no-cache、no-store 等) |
ETag | 资源的唯一标识(用于协商缓存) |
Location | 重定向目标 URL(配合 3xx 状态码) |
Access-Control-Allow-Origin | CORS 跨域允许的来源 |
七、Content-Type 常见值
text/html # HTML 页面
text/plain # 纯文本
application/json # JSON 数据(API 最常用)
application/x-www-form-urlencoded # 表单提交(默认)
multipart/form-data # 文件上传
application/octet-stream # 二进制流(文件下载)
image/png, image/jpeg # 图片
application/xml # XML 数据
✅ 总结
HTTP 的核心就是"请求-响应"模式加上文本格式的报文结构。掌握请求方法语义、状态码含义和常用 Header 字段,就能应对绝大多数 Web 开发和调试场景。用浏览器 F12 开发者工具的 Network 面板或 curl 命令,可以直观地观察每一个 HTTP 报文的细节。