微信小程序接口请求有两个cookie

前提

微信小程序是没有cookie的,我们需要手动设置header的cookie,自然cookie是存储在storage里面,然后请求接口的时候,读取storage,拼接成key=value;key=value,然后设置到header的cookie。

问题:

抓包接口,发现header有两个cookie,导致后台nginx解析异常,cookie内容拿到的都是空。一个cookie,一个Cookie。

1、玄乎之处在于当时只要连接whistle代理,请求就正常,网络切换到线上,则接口请求失败。

2、后台发现因为我页面有video播放,所以异常,如果我注释掉video,页面请求总是正常。

微信小程序接口请求有两个cookie_第1张图片

原因分析:

之所以微信会强制帮忙设置一个Cookie,原因是之前的接口response有set-cookie,微信检测到发现有set-cookie,但是后续的接口请求没有这个值,这里是serverid,所以就会强制加上去,

Date  Thu, 21 Feb 2019 11:02:29 GMT
Content-Type  text/html;charset=UTF-8
Transfer-Encoding  chunked
Set-Cookie  SERVERID=06a7df9c069298f7ec2cf688b5ed0ba8; Path=/
Access-Control-Allow-Credentials  true
Access-Control-Allow-Methods  GET, POST, OPTIONS
Cache-Control  max-age=5

所以我们需要自己把set-cookie的值提前设置到header当中去,那么微信就不会再单独一个Cookie,然后设置serverid了。

1、微信的BUG,在设置cookie的时候,并未合并原来的cookie,可能代码发现是不同的cookie,(自己设置的是小写的,其实代码是大写的,只不过微信自己改成小写了)。所以新建一个Cookie

2、为啥去掉video就可以正常,其实我看了接口都有response ,set-cookie,但是微信并未强制设置这个值,唯独在视频播放的时候,就触发了这个set-cookie值校验。应该是微信Bug,感觉是想都去做set-cookie这个事情。

3、网络切换whistle代理就请求oK,线上就失败,是因为whistle接受到两个Cookie的时候,居然合并了,把手机端发出的请求的Cookie拼接在我们自己的cookie之后,中间还隔了一个空格。所以链接whistle就没问题。坑~

解决方法:

每一次wx.request之后,处理response的set-cookie,按域名保存下来(注意是看接口域名保存起来),然后发起请求的时候,再自行设置到header的cookie中去,保证只有一个cookie。

set-cookie的acw_tc和serverid都一样处理即可。

你可能感兴趣的:(小程序,video,小程序,set-cookie,两个cookie,serverid,acw_tc)