当前位置: 首页 > 后端技术 > Node.js

axios自带cookie配置(axios+koa)

时间:2023-04-03 13:05:29 Node.js

话不多说,一句话,搞定!前端配置如下:axios.defaults.withCredentials=true;//配置为trueaxios.post('http://localhost:3000/tpzdz/vote/all',{openid:'oJ0mVw4QrfS603gFa_uAFDAH2Uc',date:'2018-11-21'}).then(function(response){console.log(response)})前端配置withCredentials=true后端跨域配置也需要app.use(async(ctx,next)=>{ctx.set('Access-Control-Allow-Origin',ctx.request.header.origin);ctx.set('Access-Control-Allow-Credentials',true);awaitnext();});//防止每次请求都返回Access-Control-Allow-MethodsandAccess-Control-Max-Age,//这两个responseheader不是每次都必须返回,只有第一次有pre-check时才会返回。app.use(async(ctx,next)=>{if(ctx.method==='OPTIONS'){ctx.set('Access-Control-Allow-Methods','PUT,DELETE,POST,GET');ctx.set('Access-Control-Max-Age',3600*24);ctx.body='';}awaitnext();});例子结束了,我们来说说它是怎么回事What'sgoingonwithCredentials:默认情况下,跨域请求不提供凭证(cookies、HTTP认证、客户端SSL证书等)。您可以通过将withCredentials属性设置为true来指定请求应发送凭据。默认值为假。true:跨域请求时携带用户凭证false:跨域请求时不携带用户凭证;cookies也会在返回的response中被忽略当配置了withCredentials=true时,responseheader必须添加到后端Access-Control-Allow-Origin,并且必须指定域名而不是*!!!那么问题来了,如果有多个域名怎么办?我配置了任何域名都可以访问,但是这样不安全。推荐的方法是创建一个数组,每次检查域名是否在数组中,如果存在,这里继续说,然后扩展post请求下的optionsoptions,就是探测请求,通过这个方法,客户端可以在对特定资源发出请求之前,决定对该资源采取什么操作是必要的,或者了解服务器的能力。对于前台的跨域post请求,由于CORS(crossoriginresourceshare)规范的存在,浏览器会先发送一个optionssniff,同时header会携带origin来判断是否有跨域请求权限,服务端返回accesscontrolalloworigin的值,让浏览器匹配origin,匹配则正式发送post请求。每个非简单请求实际上会发送两个请求,一个预检和一个真实请求,这样会损失性能。于是就有了2张图片的中间件。Access-Control-Max-Age:86400设置一个相对时间。从非简单请求在服务器端通过检查开始,经过的毫秒数小于Access-Control-Max-Age时,不需要进行预检查,直接发送请求即可。但是为什么会有两个中间件设置呢?推荐文章https://www.jb51.net/article/...很详细