一,Axios和Ajax
AJax类比飞机,,Axios类比747飞机
Ajax技术实现了不刷新页面进行局部更新的操作;
Axios是通过Promise实现XHR封装,其中Promise是控制手段,XHR是实际发送Http请求的客户端
// axios
const options = {
url: 'http://localhost/test.htm',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
//不需要将data中的数据处理为json
data: {
a: 10,
b: 20
}
};
axios(options)
.then(response => {
console.log(response.status);
});
二,fetch
// fetch()
const url = 'http://localhost/test.htm';
const options = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
body: JSON.stringify({
a: 10,
b: 20
})
};
fetch(url, options)
.then(response => {
console.log(response.status);
});
注意:
- 发送数据,fetch()使用的是body属性,而Axios使用的是data属性;
- fetch()方法里的data是被字符串化的;
- 在fetch()中,URL是作为参数被使用,而在Axios中,URL是作为options的一个配置项。
转载:juejin.cn/post/684490…
转载:www.jianshu.com/p/bd93cf7d8…
转载:blog.csdn.net/weixin_4471…
三,Vue前端登陆拦截
- router.js
在路由跳转时触发;
在router.js中设置beforeEach判断是否登陆token存在(但无法判断token是否失效);
在http请求时触发;
- axios.js
创建axios.interceptors.request(在请求头中加入token)/respones.use(function(){return })(判断返回的token是否生效);axios请求或响应拦截器,一定要有返回值; - main.js
创建Vue.http.interceptors.respones利用vue-resource实现 和axios等价 实现一个就可以;
四,前端登陆验证的方式
- cookie+session
前言:
登陆流程:用户第一次登陆时,服务器验证成功,服务器创建并保存sessionid,将sessionid返回给浏览器,将sessionid保存近cookie,下一次发送http请求后,服务器根据传递的cookie验证cookie是否有效,有效则登陆成功。【sessionid】存在cookie中,所以当停用cookie,sessionid也随之失效。
缺点:当面对多个用户时,每一次客户端注册了一个用户,服务器就需要对应存入一个sessionid,导致服务器压力过大,同时无法避免csrf攻击;
-
token
解决了cookie+session登陆的瑕疵;
登陆流程:第一次用户登陆时,服务器验证,验证成功后生成token,返回给客户端;客户端允许访问。下一次登陆时,携带token,服务器判断token是否生效,失效跳入登陆面,成功,允许用户访问。【token可以存在任何部分】
token生成过程
最常见的时JWT(json web token)
1,header 部分指定了该 JWT 使用的签名算法;
2,playload 部分表明了 JWT 的意图:
3,signature 部分为 JWT 的签名 -
首先,将header,playload进行base64编码拼接到一起生成unsignedToken,然后把服务器密钥与其拼接到一起生成signature;然后,将三部分字符串用.拼接到一起;
验证时,服务器得到signature解码判断是否与unsignedToken解码后相同,从而判断是否被窜改;