老版本chrome内核浏览器跨域问题,UC浏览器跨域问题

456 阅读1分钟

报错

在基于chrome老版本内核的浏览器中,包括较老的chrome浏览器,会遇到这样的跨域报错

Request header field xxx is not allowed by Access-Control-Request-Headers in preflight response

image.png

问题原因

1、请求头headers中自定义了参数,而接口配置跨域的Access-Control-Request-Headers为* , 通配符支持的chrome最低版本是63,而uc浏览器是基于低版本chrome内核封装,版本是55,所以还不支持通配符

image.png

2、同时可以看到低版本chrome内核浏览器会在响应头里面自动加入了Access-Control-Request-Headers这个参数,高版本浏览器就没有这个参数

image.png

解决方案

  • 去掉通配符 *
  • 手动添加字段,多个字段用逗号隔开
  • 重启服务
headers.add("Access-Control-Allow-Headers",timestamp,Authorization);

另外

低版本chrome浏览器有很多兼容性问题,post请求中,在response的返回参数中,取不到headers中的自定义参数,如果需要取自定义参数,可以在data中传参取值