axios携带cookie配置详解(axios+koa)
话不多说,一个字,干!
前端配置如下
axios.defaults.withCredentials = true; //配置为true axios.post('http://localhost:3000/tpzdz/vote/all', { openid: 'oJ0mVw4QrfS603gFa_uAFDADH2Uc', date: '2018-11-21' }).then(function (response) { console.log(response) })
前端配置withCredentials = true 后端的跨域也需要配置
app.use(async (ctx, next) => { ctx.set('Aess-Control-Allow-Origin', ctx.request.header.origin); ctx.set('Aess-Control-Allow-Credentials', true); await next(); }); //防止每次请求都返回Aess-Control-Allow-Methods以及Aess-Control-Max-Age, //这两个响应头其实是没有必要每次都返回的,只是第一次有预检的时候返回就可以了。 app.use(async (ctx, next) => { if (ctx.method === 'OPTIONS') { ctx.set('Aess-Control-Allow-Methods', 'PUT,DELETE,POST,GET'); ctx.set('Aess-Control-Max-Age', 3600 24); ctx.body = ''; } await next(); });
实例展示完了,我们来讲讲都是怎么回事
withCredentials:默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据。
- 默认值为false。
- true在跨域请求时,会携带用户凭证
- false在跨域请求时,不会携带用户凭证;返回的 response 里也会忽略 cookie
当配置了 withCredentials = true
时,必须在后端增加 response 头信息Aess-Control-Allow-Origin,且必须指定域名,而不能指定为!!!
那么问题就来了,若是多个域名呢?
我配置的是任意域名都可以访问,这样并不安全。建议做法是创建一个数组,每次去检测域名是否在数组内,存在则继续
讲到这里了,那么延伸一下 post请求下的options
options 它是一种探测性的请求,通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。
前台跨域post请求,由于CORS(cross origin resource share)规范的存在,浏览器会发送一次options嗅探,header带上origin,判断是否有跨域请求权限,服务器响应aess control allow origin的值,供浏览器与origin匹配,如果匹配则正式发送post请求。
每一次非简单请求都会实际上发出两次请求,一次预检一次真正请求,这就比较损失性能了。
所以就有了2图的中间件。 Aess-Control-Max-Age: 86400
设置一个相对时间,在该非简单请求在服务器端通过检验的那一刻起,当流逝的时间的毫秒数不足Aess-Control-Max-Age时,就不需要再进行预检,可以直接发送一次请求。
为什么会有两个中间件的设置呢,推荐文章 很细致哦
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南