

新闻资讯
技术学院fetch是浏览器原生API,axios是第三方库;fetch需手动处理错误、JSON解析、cookie、文件上传等,axios则自动处理并提供拦截器、进度监听等功能。
fetch 是现代浏览器内置的网络请求接口,不需要额外安装;axios 必须通过 npm install axios 引入,或用 标签加载。两者都能发 GET/POST 请求,但默认行为、错误处理、配置方式差异明显。
response.ok 需手动判断.catch()
body)需手动序列化为 JSON 并设置 Content-Type;axios 自动处理 data 序列化和 header 设置axios.interceptors.request.use() 等机制fetch 返回的是 Response 对象,不是直接的 JSON 数据,必须显式调用 .json() 方法并等待 Promise。这个步骤容易遗漏或误写成同步操作。
fetch('/api/user')
.then(response => {
if (!response.ok) throw new Error(`HTTP error: ${response.status}`);
return response.json(); // 必须这一步
})
.then(data => console.log(data))
.catch(err => console.error(err));
.json() 会导致后续拿到的是 Response 实例,不是解析后的对象.json() 本身可能 reject(比如返回空响应体或非法 JSON),需额外 try/catch 或链式捕获axios.get('/api/user').then(res => res.data)
fetch 默认不携带 cookie,必须显式传 { credentials: 'include' };axios 默认也不带,但可通过全局配置或单次请求设置 withCredentials: true,语义更清晰。
fetch('/api/profile', { credentials: 'include' })
axios.get('/api/profile', { withCredentials: true }) 或设 axios.defaults.withCredentials = true
Access-Control-Allow-Origin 为具体域名,不能是 *
fetch 上传文件需手动构造 FormData 并注意不设置 Content-Type(让浏览器自动设置边界值);axios 会自动识别 FormData 并正确设置 headers。
立即学习“Java免费学习笔记(深入)”;
const formData = new FormData();
formData.append('file', fileInput.files[0]);
// fetch:不设 headers,否则 boundary 会出错
fetch('/upload', {
method: 'POST',
body: formData
// ❌ 不要加 headers: { 'Content-Type': 'multipart/form-data' }
});
// axios:直接传 formData,内部处理 header
axios.post('/upload', formData);
Content-Type 为 multipart/form-data 会导致上传失败(浏览器无法插入 boundary)FormData 时自动删除 Content-Type header,交由浏览器生成ReadableStream 手动读取(复杂);a
xios 提供 onUploadProgress 回调