你了解 Axios 的工作原理吗?

Axios 是一个基于 Promise 的 HTTP 请求库,主要通过适配器机制统一接口,并实现请求的拦截和取消等功能。

网络协议 中等 Promise axios HTTP

Axios 是一个基于 Promise 的 HTTP 请求库,其核心原理是通过封装底层 API 提供统一的接口,适用于浏览器和 Node.js 环境。主要原理如下:

  1. 底层适配器
    • 在浏览器环境中,Axios 使用 XMLHttpRequest(XHR)对象作为底层 API 来处理 HTTP 请求。
    • 在 Node.js 环境中,则使用核心模块 httphttps
    • Axios 通过一个适配器(Adapter)机制自动识别运行时环境并选择合适的底层实现,对上层暴露一致的 Promise API。
  2. 核心流程
    • 实例创建:通过 axios.create(config) 创建自定义实例。
    • 请求创建:调用方法(如 axios(config) 或简化方法 get(), post())后,进入请求流程。
    • 请求处理顺序:请求拦截器 > 转换请求数据 > 适配器请求 > 转换响应数据 > 响应拦截器 > 返回 Promise
      // 代码举例:请求序列
      axios.interceptors.request.use(function (config) {
          // 修改配置(如添加token)
          return config;
      });
      
      axios('/api/data', {
          // config
      }).then(function (response) {
          // 处理实际结构数据
      });
      
  3. 关键特性机制
    • 拦截器原理:通过链式管理 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 自动化集成于对象传输入口中。
  4. 封装扩展能力
    • HTTP 错误处理:针对状态码非 2xx 的场景,由 validateStatus 定义可配置策略,并进入 .catch 流程处理错误对象。
    • 安全的请求发送:在浏览器发送过程中,Axios 集成基础 CSRF(跨站伪冒请求)防护方法,携带 cookies 后以 X-XSRF-TOKEN 头的机制预防。

综上所述,axios 的核心在于统一了异步请求与操作过程的封装模式,同时适配不同平台下的网络方法底层特性。