axios原理

1.axios是什么?

axios是一个基于promise的http库,可以用在浏览器和node.js的环境中;本质上也是对原生xhr的封装,只不过它是promise的实现版本,符合最新的ES规范

axios有什么特性

1.可以用在浏览器和node.js的环境中,从浏览器中创建XMLHttpRequests;基于node内置核心模块http实现axios,从中创建http请求,也就是说,axios可以在浏览器上和服务器上都可以发起请求
2.是一个基于Promise的HTTP库,支持promise的所有API
源码中返回的是一个promise对象
3.拦截请求和响应
4.可以转换请求数据和响应数据,并对响应的内容自动转换为json类型的数据
(转换数据,源码看不懂…)
在这里插入图片描述

5.安全性更高,客户端支持防御XSRF

首先axios会判断当前环境是否为标准的浏览器环境,如果是标准的浏览器环境的话,就会继续执行。对于XSRF攻击来说,最基本的就是跨域了,所以我们对发出请求的域和当前的域做同源判断,如果是跨域的话,就必须有凭证config.withCredentials || isURLSameOrigin(fullPath),凭证简单来说就是当前请求在跨域时是否可以带上cookie。
在满足上面条件时,即是同源或者跨域但是有凭证这两种情况,同源的我们自然不必再处理,而对于跨域的我们接下去看,当config中有xsrfCookieName时,将config.xsrfCookieName的内容使用cookies.read处理后返回给xsrfValue
(源码看不懂系列)
在这里插入图片描述

6.axios中的发送字段的参数是data和params两个,两者的区别在于params是跟请求地址一起发送的,data的作为一个请求体进行发送
params一般适用于get请求,data一般适用于post put请求
7.同时支持浏览器端和服务端的请求;vue用这一特性对vue的服务端渲染服务
8.取消请求
axios提供了取消请求的接口,实际上在源码中还是通过最关键的一步request.abort()来取消请求,使用isCancel来作为是否已经取消的标识,使用Cancel来作为重复取消时抛出的错误,使用CancelToken来作为取消请求的核心处理,在处理中采取promise异步的方法

axios的取消请求相比于我们直接使用abort,因为在promise中写入重复触发时会抛出cancel对象,所以无需我们自己去解决按钮被连续多次点击的问题,同时取消请求也能在我们发出多个相关联请求时,使用最新的数据。

第七点分析:
在这里插入图片描述
**通过XHR和process来判断浏览器环境还是node环境!!!**从而在不同的环境提供不同的http请求模块,实现客户端和服务端程序的兼容

知识点:

XMLHttpRequest 是浏览器内置的一个对象,它为客户端提供了在客户端和服务器之间传输数据的功能。

process 对象是node内置的一个全局变量,提供有关信息,控制当前 Node.js 进程。

axios较其他网络请求库的优点

1.简单易用,api接近于jquery,比原生的fetch之类简单
2.浏览器兼容性好,都能兼容IE7,使用fetch的话就得自己处理兼容
3.通用性好,能在node和浏览器中使用,api一致
4.稳定大牌,vue官网文档中有推荐

基本原理
1.axios还是属于xhr,因此需要实现一个ajax或基于http;
2.需要结合promise对象对结果进行处理

缺点
1.不支持jsonp,需要自己封装
2.基于xhr实现,所以无法在service worker,web worker中使用

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值