fetch和axios的区别

1、fetch

来源与兼容性 浏览器原生提供的api,现代浏览器支持,但是IE浏览器不支持

请求与响应处理

  • 请求体格式: 需手动设置 Content-Type,如发送 JSON 时需 JSON.stringify(data) 并添加 headers: { 'Content-Type': 'application/json' }
  • 需要手动处理JSON解析(response.json())
  • 错误状态码(默认不抛出HTTP错误,如 404、500,需要检查response.ok)
  • cookie: 默认不带cookie,需手动配置 credentials:'include'

拦截器与全局配置

  • 无内置拦截器,需手动封装或使用第三方库实现类似功能。
  • 全局配置需自行封装(如统一添加请求头)。

错误处理 仅在网络请求失败时(如断网)触发 reject,HTTP 错误状态码(如 404)不会触发 catch

取消请求 使用 AbortController 实现取消。

上传/下载进度监控 不支持原生进度监控,需通过读取响应流实现(较复杂)。

CSRF/XSRF 防护 需手动处理

js 复制代码
const controller = new AbortController();

fetch(url, {signal: controller.signal}).then(res => { 
    if (!res.ok) throw new Error("HTTP error"); 
    return res.json(); 
}).catch(err => {
    if (err.name === 'AbortError') console.log('Request canceled');
});

controller.abort(); // 取消请求

使用场景:

  • 对依赖体积敏感,不想引入额外依赖。
  • 请求逻辑简单,无需复杂配置或拦截器。

2、axios

来源与兼容性 第三方组件库(基于XMLHttpRequest)

请求与响应处理

  • 请求体格式: 自动根据数据类型设置 Content-Type(如对象默认转为 JSON)。
  • 自动处理JSON解析(response.data)
  • 自动将非 2xx 状态码视为错误(触发 catch
  • cookie: 默认带cookie: 自动发送同源请求的cookie

拦截器与全局配置

  • 支持 请求/响应拦截器,方便统一处理日志、认证、错误等。
  • 支持全局默认配置(如 baseURLheaders)。

错误处理 任何 HTTP 错误状态码(如 404、500)均会触发 catch

取消请求 使用 AbortController 实现取消。

上传/下载进度监控 支持 onUploadProgressonDownloadProgress 回调。

CSRF/XSRF 防护 内置支持 XSRF Token 配置。

js 复制代码
const controller = new AbortController();

axios.get(url, {signal: controller.signal}).then(res => {
   console.log(res.data)
}).catch(err => {
    if (axios.isCancel(err)) console.log('Request canceled');
});

controller.abort();

使用场景:

  • 需要拦截器、取消请求、超时等高级功能。
  • 项目跨浏览器和 Node.js 环境。
  • 希望简洁的 API 和自动错误处理。
相关推荐
可乐鸡翅yeah_19 分钟前
hls.js 播放质量埋点实战,采集卡顿、起播、错误指标定位线上用户问题
开发语言·前端·javascript·ecmascript·音视频·m3u8·音视频在线播放
tedcloud12339 分钟前
Wand-Enhancer:如何搭建一套远程开发与测试环境
前端·人工智能·macos·开源·流程图
掘金挖土1 小时前
前端手摸手跑路之 AI 应用开发(三)
前端·后端
计算机魔术师1 小时前
OpenAI 宣称破解千禧年难题,数学家却说是「反例搜索」?
前端
志尊宝1 小时前
Vue3 零基础每日笔记(015):条件渲染 v-if 与 v-show——控制 DOM 生死还是控制显隐
前端·vue.js·笔记
掘金者阿豪1 小时前
OceanBase 和金仓怎么选?别只看分布式,复杂查询更考验架构取舍
前端·后端·架构
Bug修理工Bubble2 小时前
Swift ARC:一个对象到底什么时候才会被释放?
前端
ClouGence2 小时前
GPT-6 做 UI 自动化测试:Demo 惊艳,但真的适合长期回归吗?
前端·chatgpt·测试
阿酷tony2 小时前
视频专栏列表的防录屏水印和跑马灯效果(也可网站调用)
java·前端·音视频
凌风的跨境分享3 小时前
Temu店群运维提效:定时策略自动化任务全场景实操指南
大数据·运维·前端·人工智能·架构·自动化