一、核心特性
- 无状态性 :
不保存客户端与服务器之间的交互状态,每次请求是独立的------服务器不会记住上一次请求的信息- 通过 Cookie、Session、Token 等机制补充状态管理(例如登录后服务器返回 Cookie,后续请求携带 Cookie 即可识别用户)
- 无连接性 (http/1.0特性):
1.0 规定每次请求 - 响应完成后,TCP 连接就会断开,频繁请求会导致大量 TCP 握手 / 断开开销- 1.1 引入持久连接(Keep-Alive),默认开启,TCP连接可复用,处理多个请求后再断开;2 进一步通过多路复用提升连接效率
- 明文传输 :
HTTP 传输的数据未加密,直接以明文形式在网络中传输,存在被窃听、篡改的风险- HTTPS(HTTP over SSL/TLS)通过加密和证书验证解决此问题,是目前主流的安全传输方式
二、HTTP 请求 - 响应模型
请求流程
客户端(如浏览器)向服务器发送请求,服务器处理后返回响应,全程基于 TCP 可靠连接
- 客户端与服务器建立 TCP 连接(三次握手)
- 客户端发送 HTTP 请求报文
- 服务器解析请求,处理业务逻辑(如查询数据库、读取文件)
- 服务器返回 HTTP 响应报文
- 客户端解析响应,渲染内容(如浏览器展示网页)
- 基于 Keep-Alive 决定是否保持 TCP 连接
请求报文结构
HTTP 请求报文由请求行、请求头、空行、请求体四部分组成
- 请求行 :
包含请求方法、请求 URL、HTTP 版本 ,格式:请求方法 URL HTTP版本
示例:GET /index.html HTTP/1.1 - 请求头 :
键值对形式,传递附加信息 (如客户端类型、接受的数据格式),常见字段:Host:目标服务器域名(如Host: www.example.com)User-Agent:客户端标识(如浏览器型号、系统版本)Accept:客户端可接受的响应数据类型(如Accept: text/html, application/json)Cookie:携带客户端状态信息Content-Type:请求体的数据格式(如Content-Type: application/json,仅 POST/PUT 等带请求体的方法需要)
- 空行 :
分隔请求头和请求体,必须存在(即使无请求体) - 请求体 :
仅 POST、PUT 等方法包含,传递需要提交的数据(如表单信息、JSON 数据)
响应报文结构
HTTP 响应报文由状态行、响应头、空行、响应体四部分组成
- 状态行 :
包含 HTTP 版本、状态码、状态描述 ,格式为:HTTP版本 状态码 状态描述
示例:HTTP/1.1 200 OK - 响应头 :
键值对形式,传递服务器信息和响应附加数据 ,常见字段:Server:服务器软件标识(如Server: Nginx/1.21)Content-Type:响应体的数据格式(如Content-Type: text/html; charset=utf-8)Content-Length:响应体的字节长度Set-Cookie:服务器向客户端设置 CookieCache-Control:缓存控制策略(如Cache-Control: max-age=3600)
- 空行 :
分隔响应头和响应体 - 响应体 :
服务器返回的实际数据(如 HTML 页面、JSON 字符串、图片二进制数据)
三、常见请求方法
HTTP 定义了多种请求方法,用于表示对资源的操作意图,核心方法如下:
| 方法 | 作用 | 是否带请求体 | 幂等性 | 主要参数位置 | 次要 / 补充参数位置 | 特殊说明 |
|---|---|---|---|---|---|---|
| GET | 获取服务器上的资源(如网页、图片) | 否(参数可拼在 URL 后) | 是(多次请求结果一致) | URL 查询字符串(?key=value) |
无(请求头极少用) | 禁止放请求体;URL 长度有限制;明文传输,敏感数据不适用 |
| POST | 向服务器提交数据(如表单提交、创建资源) | 是 | 否(多次提交可能产生不同结果,如重复创建订单) | 请求体(Body) | URL 查询字符串 | 请求体格式由Content-Type指定(JSON / 表单 / 文件等);无大小硬限制 |
| PUT | 更新服务器上的资源(全量更新) | 是 | 是(多次更新结果一致) | 请求体(Body) | URL 路径(资源 ID)+ 查询字符串 | URL 通常指定资源唯一标识(如/users/10),请求体传完整更新数据 |
| DELETE | 删除服务器上的资源 | 否 / 是 | 是 | URL 路径(资源 ID)+ 查询字符串 | 请求体(特殊场景) | 规范推荐 URL 传参;请求体传参需服务器支持(如批量删除{"ids":[10,20]}) |
| HEAD | 仅获取响应头(不返回响应体),用于检查资源状态 | 否 | 是 | URL 查询字符串(?key=value) |
无(请求头极少用) | 与 GET 参数规则完全一致,仅返回响应头,无响应体 |
| PATCH | 更新服务器上的资源(部分更新) | 是 | 是 | 请求体(Body) | URL 路径(资源 ID)+ 查询字符串 | URL 指定资源标识,请求体传部分更新字段 (如仅改name,无需传完整数据) |
幂等性:多次执行相同请求,结果与执行一次的结果一致(保证操作安全)
四、HTTP 状态码
状态码是服务器返回的三位数字,用于表示请求的处理结果,分为 5 类:
1xx(信息性状态码)
表示服务器已接收请求,正在处理,如:
100 Continue:客户端可继续发送请求体(用于大请求的预检)
2xx(成功状态码)
表示请求成功处理,如:
200 OK:请求成功,响应体返回数据201 Created:资源创建成功(如 POST 创建用户)204 No Content:请求成功,但无响应体(如 DELETE 删除资源)
3xx(重定向状态码)
表示需要客户端进一步操作(如跳转),如:
301 Moved Permanently:永久重定向(如域名更换)302 Found:临时重定向304 Not Modified:资源未修改,使用客户端缓存(节省带宽)
4xx(客户端错误状态码)
表示请求存在错误(客户端问题),如:
400 Bad Request:请求参数错误或格式非法401 Unauthorized:请求需要身份验证(未登录)403 Forbidden:服务器拒绝访问(权限不足)404 Not Found:请求的资源不存在(如访问不存在的网页)405 Method Not Allowed:请求方法不被允许(如用 GET 请求修改资源)
5xx(服务器错误状态码)
表示服务器处理请求时出错,如:
500 Internal Server Error:服务器内部未知错误(如代码 bug)502 Bad Gateway:网关 / 代理服务器收到上游服务器的无效响应503 Service Unavailable:服务器暂时不可用(如过载、维护)504 Gateway Timeout:网关 / 代理服务器请求上游服务器超时
五、HTTP 版本演进
HTTP/0.9(1991 年)
- 最早期版本,仅支持 GET 方法,无请求头 / 响应头,仅传输 HTML 文本,功能极简
HTTP/1.0(1996 年)
- 支持 GET、POST、HEAD 方法
- 引入请求头、响应头,支持多种数据类型(图片、视频等)
- 每次请求对应一个 TCP 连接(无连接性),效率低
HTTP/1.1(1999 年,目前主流)
- 默认开启持久连接(Keep-Alive),复用 TCP 连接
- 支持管道化请求(客户端可连续发送多个请求,无需等待响应)
- 引入 Host 头,实现一台服务器托管多个域名(虚拟主机)
- 新增 PUT、DELETE、PATCH 等方法,完善资源操作
- 支持分块传输(Transfer-Encoding: chunked),边生成数据边传输
HTTP/2(2015 年)
- 多路复用:一个 TCP 连接可同时处理多个请求 / 响应(解决 HTTP/1.1 的队头阻塞问题)
- 二进制帧:将报文拆分为二进制帧传输,解析效率更高
- 服务器推送:服务器可主动向客户端推送资源(如网页依赖的 CSS/JS 文件)
- 头部压缩:对请求头 / 响应头进行压缩,减少传输体积
5. HTTP/3(2022 年)
- 基于 QUIC 协议(UDP 之上的可靠传输协议),替代 TCP,解决 TCP 队头阻塞问题
- 更快的连接建立(无需三次握手),优化移动端网络切换(如 4G/5G 切换)
- 目前逐步普及,主流 CDN 和浏览器已支持
六、HTTP 与 HTTPS 的区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 安全性 | 明文传输,无加密 | 基于 SSL/TLS 加密传输,防窃听、篡改、伪造 |
| 端口 | 80 | 443 |
| 证书 | 无需 | 需要 CA 颁发的数字证书(验证服务器身份) |
| 性能 | 无加密开销,速度稍快 | 加密 / 解密有开销,需握手,但 HTTP/2 可弥补 |
| 搜索引擎 | 无权重加成 | 搜索引擎优先收录,提升排名 |
七、常见应用场景
- 网页浏览:浏览器通过 HTTP/HTTPS 请求网页、图片、JS/CSS 资源
- API 接口:前后端分离项目中,前端通过 HTTP 请求后端 API(如 RESTful API)
- 文件下载:通过 GET 请求下载文件(支持断点续传)
- 物联网通信:设备通过 HTTP 向服务器上报数据或接收指令
HTTP 协议核心权威渠道
-
HTTP 工作组规范汇总页(官方核心入口):
https://httpwg.org/specs/,这里整合了 HTTP/1.1、HTTP/2、HTTP/3 等各版本的权威 RFC 文档链接,是获取官方规范的核心地址
-
HTTP 工作组主页:
https://httpwg.org/,可了解工作组动态、规范制定进度等信息
-
RFC 官方发布平台:
https://www.rfc-editor.org/,能检索到 HTTP 各版本对应的 RFC 文档(如 HTTP/1.1 对应 RFC 9112、HTTP/2 对应 RFC 9113、HTTP/3 对应 RFC 9114)
-
补充学习渠道:
MDN Web Docs 的 HTTP 专题(https://developer.mozilla.org/zh-CN/docs/Web/HTTP),虽非官方规范,但有详细的中文教程与参考,适合学习理解