iOS 12下请求失败

613 阅读1分钟

由于我们服务端设置了Access-Control-Allow-Headers : *,导致OPTIONS一直返回空的响应头,无法跨域。

/**
 * ios 12版本以下, Access-Control-Allow-Headers 为通配符 ’*‘ 引发报错
 * 设置 请求头白名单加当前请求请求头,问题解决
 */
app.all('*', function (req, res, next) {
  const headersKeys = Object.keys(req.headers);
  const whiteHeaders = ["version", "uuid", "platform_version_name", "platform_version_code", "sn", "udid","operator","channel","store_id","Content-Type","Content-Length","Authorization","Accept","X-Requested-With"];
  const allowHeaders = _.uniq([...headersKeys, ...whiteHeaders])
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", `${allowHeaders}`);
  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  res.header("Content-Type", "application/json;charset=utf-8");
  next();
});

在IOS12版本下,是浏览器内核触发了cors拦截,但仅仅拦截了非简单跨域请求。如果你的请求是简单请求,那么在IOS12版本下不会出现这个问题。

MDN 简单请求

developer.mozilla.org/zh-CN/docs/…

掘金文章

juejin.cn/post/694651…

axios issues

github.com/axios/axios…

stackoverflow 问答

stackoverflow.com/questions/4…