上一篇文章分析了dispatchRequest模块以及拦截器模块的功能,知道实际上是调用请求适配器来发送请求的,而adapter是配置在defaults.js模块的。 本篇文章主要分析defaults.js模块中adapter以及其背后的实现。
defaults.js模块是默认配置,配置如下:
adaptertransformRequesttransformResponsetimeoutmaxContentLengthheaders.common 等本篇主要讲adapter,这是axios实际请求发送的核心,实际上defaults.js中关于其的配置如下:
function getDefaultAdapter() { var adapter; if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { adapter = require('./adapters/http'); } else if (typeof XMLHttpRequest !== 'undefined') { adapter = require('./adapters/xhr'); } return adapter; }adapter: getDefaultAdapter()
实际上上面的逻辑处理分为两种情况: - Node.js环境下,引入http.js模块 - 浏览器环境下,引入xhr.js模块
Node.js下使用内置的http模块来实现请求发送 在浏览器环境下就使用XMLHttpRequest来实现请求发送
我们就看下xhr.js模块中相关处理。
上图中就是xhr.js模块中的处理,实际上就是创建XMLHttpRequest对象发送请求以及处理请求头的设置。
至此,axios整个流程梳理完了,中间实际上有一些细节点没有去提及,例如XSRF的问题、相关工具集等,但这些不影响整体流程,只是流程中细节点。
axios整个流程如下: