fetch适合简单请求、轻量项目或最小化依赖场景,如静态页、PWA、微前端子应用;axios更适用于中大型项目,具备自动JSON处理、拦截器、取消请求、默认错误抛出等优势。

JavaScript 发送 HTTP 请求,fetch 是浏览器原生支持的现代 API,轻量、无需额外依赖;axios 是第三方库,功能更全、使用更友好。选哪个不绝对,关键看项目需求和团队习惯。
fetch 适合什么场景?
适合简单请求、轻量项目或需要最小化依赖的环境(比如纯前端静态页、PWA、微前端子应用)。
- 语法简洁,Promise 风格,配合 async/await 很自然
- 自动携带 Cookie 需显式设置
credentials: 'include' - 默认不带请求体(如 POST 的 JSON),需手动
JSON.stringify()并设Content-Type - 注意:4xx/5xx 状态码不会触发 catch,需手动检查
response.ok
axios 更方便在哪?
封装了常见痛点,开箱即用,尤其适合中大型项目或需要统一拦截、错误处理、取消请求的场景。
- 自动序列化/反序列化 JSON,不用手动处理 body 和响应解析
- 内置请求/响应拦截器,方便加 token、loading、日志、错误统一提示
- 天然支持取消请求(
AbortController在 fetch 中也支持,但 axios 封装得更顺手) - 默认对非 2xx 响应抛错,catch 可直接捕获业务异常
- 支持浏览器和 Node.js(配合
axios-node或 v1.7+ 原生支持)
实际开发怎么选?
小项目、学习、快速原型:从 fetch 入手,理解底层机制,无额外包体积。
立即学习“Java免费学习笔记(深入)”;
团队协作、已有工程化体系、需稳定维护:推荐 axios,省去重复封装,生态成熟,文档丰富,TypeScript 支持好。
新项目想“极简但不简陋”:也可用 ky 或 redaxios 这类轻量替代品,比 fetch 多些便利,又比 axios 更小。
不复杂但容易忽略:两者都能满足绝大多数需求,真正影响体验的是是否配好拦截器、错误映射、Loading 状态管理——这些和用哪个库关系不大,和你怎么组织代码关系更大。











