你了解 Axios 的工作原理吗?
Axios 是一个基于 Promise 的 HTTP 请求库,主要通过适配器机制统一接口,并实现请求的拦截和取消等功能。
Axios 是一个基于 Promise 的 HTTP 请求库,其核心原理是通过封装底层 API 提供统一的接口,适用于浏览器和 Node.js 环境。主要原理如下:
- 底层适配器
- 在浏览器环境中,Axios 使用 XMLHttpRequest(XHR)对象作为底层 API 来处理 HTTP 请求。
- 在 Node.js 环境中,则使用核心模块
http
或https
。 - Axios 通过一个适配器(Adapter)机制自动识别运行时环境并选择合适的底层实现,对上层暴露一致的 Promise API。
- 核心流程
- 实例创建:通过
axios.create(config)
创建自定义实例。 - 请求创建:调用方法(如
axios(config)
或简化方法get()
,post()
)后,进入请求流程。 - 请求处理顺序:请求拦截器 > 转换请求数据 > 适配器请求 > 转换响应数据 > 响应拦截器 > 返回 Promise:
// 代码举例:请求序列 axios.interceptors.request.use(function (config) { // 修改配置(如添加token) return config; }); axios('/api/data', { // config }).then(function (response) { // 处理实际结构数据 });
- 实例创建:通过
- 关键特性机制
- 拦截器原理:通过链式管理
Promise.then
将配置序列组合处理请求,通过类似模式处理响应环节,让不同拦截点可编程干预传递过程的配置或数据。 - 取消请求原理:基于
CancelToken.soure
模式产生可中止的信号 token,关联 XHR AbortController 机制:const { token } = axios.CancelToken.source(); axios.get('/data', { cancelToken: token }); token.cancel("Operation canceled by the user"); // 调用取消实现中断
- 自动转换 JSON 数据:将请求对象的
JSON.stringify
和服务器响应 JSON的JSON.parse
自动化集成于对象传输入口中。
- 拦截器原理:通过链式管理
- 封装扩展能力
- HTTP 错误处理:针对状态码非 2xx 的场景,由
validateStatus
定义可配置策略,并进入.catch
流程处理错误对象。 - 安全的请求发送:在浏览器发送过程中,Axios 集成基础 CSRF(跨站伪冒请求)防护方法,携带 cookies 后以
X-XSRF-TOKEN
头的机制预防。
- HTTP 错误处理:针对状态码非 2xx 的场景,由
综上所述,axios 的核心在于统一了异步请求与操作过程的封装模式,同时适配不同平台下的网络方法底层特性。