fetch是原生API,简洁但需手动处理JSON、错误状态和Cookie;axios是功能完备库,自动解析、拦截器、超时取消等开箱即用;轻量场景选fetch,中大型项目优先axios。
JavaScript 实现网络请求最常用的是 fetch(原生 API)和 axios(第三方库),它们都能发起 HTTP 请求,但设计目标、使用方式和默认行为差异明显。
fetch 由浏览器原生提供,无需安装依赖,语法简洁,但默认不带 Cookie、不自动处理 JSON、4xx/5xx 状态码也不会 reject,需手动判断:
.json()、.text() 等方法解析响应体catch;HTTP 错误状态(如 404、500)仍走 then,需检查 response.ok 或 response.status
credentials: 'include'
AbortController)axios 基于 XMLHttpRequest(浏览器)或 http 模块(Node.js),开箱即用,对开发者更友好:
.json())catch(可配置
validateStatus 修改规则)withCredentials
timeout)、取消请求(CancelToken 或 AbortController)、并发控制(axios.all)fetch:
fetch('/api/user', {
method: 'GET',
credentials: 'include'
})
.then(res => {
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
})
.then(data => console.log(data))
.catch(err => console.error(err));
axios:
axios.get('/api/user', {
withCredentials: true
})
.then(res => console.log(res.data))
.catch(err => console.error(err));
fetch,搭配 AbortController 和封装工具函数即可补足短板axios 更省心axios