axios 源码阅读
https://juejin.im/post/6885471967714115597#heading-15
* HTTP 拦截器的设计与实现:
从 任务注册、任务编排和任务调度 三个方面来分析 Axios 拦截器的实现。
任务注册就是我们最常见的观察者,维护 handlers 数组。
任务编排组装任务调用链 chain,将 interceptor.fulfilled, interceptor.rejected 和 dispatchAction,undeffined 和 interceptor.fulfilled, interceptor.rejected 拼接成任务 chain 。
任务调度通过 while 语句我们就可以不断地取出设置的任务,然后组装成 Promise 调用链从而实现任务调度
* HTTP 适配器的设计与实现:
Axios 同时支持浏览器和 Node.js 环境,对于浏览器环境来说,我们可以通过 XMLHttpRequest 或 fetch API 来发送 HTTP 请求,而对于 Node.js 环境来说,我们可以通过 Node.js 内置的 http 或 https 模块来发送 HTTP 请求。
Axios 的适配器是通过 XMLHttpRequest !== 'undefined' 和 (typeof process !== 'undefined' 进行了环境判断,代码较简单,主要可以学习适配器模式
* 如何防御 CSRF 攻击。
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作。
文章介绍了一些常用的放于 csrf 的方法,如检查 Referer 字段、同步表单校验(表单中带有服务器生成的token,提交时要带上)、双重 cookie 校验。
Axios 采用了双重 cookie 校验,通过使用者设置config 的 XSRF-TOKEN 字段生效。