项目使用vue2,因为客户要求,需要兼容IE浏览器,在谷歌浏览器一切正常,在IE浏览器中从一个页面跳转到另一个页面(两个页面IP相同,端口不同),可以理解为生成订单后点击支付跳转支付页面。
在支付页面中调用了获取订单信息的接口,该接口不需要token验证,我的token是存在sessionStorage中的,在IE11环境下,每次跳转到支付页获取订单详情的接口都调不通,后端返回406,各种百度谷歌搜索问题都指向后端响应头的问题,于是和后端各种调整,弄了一天无济于事。
第二天才注意到token的问题,我的理解是如果接口不校验token,那么请求头中携带与否都不影响接口调用,在Apipost中调用该接口,当不携带token时可以正常调用,携带了错误的token时返回406,果然是token的问题,那么问题又来了,这个token是我在另一个页面获取并保存在sessionStorage中的,两个页面的端口不同,为什么在页面跳转的时候把这个端口保存的token携带了过去?但是在chrome浏览器中token也被携带过去却没有出现此问题,不知道是什么情况。
最终解决办法是在这个api请求时加一个请求头,在请求拦截器中通过此请求头判断是否需要携带token。
在我的认知里,sessionStorage中的数据,同IP不同端口是无法共享的,不知为何在页面跳转的时候携带了过去,后续查询也未解决此疑惑,总之问题算是解决了,后续如果有其他小伙伴遇到该问题可以排查是否是因为token的问题。