React Axios在iOS出现Network Error但桌面端正常的问题求助
解决iOS 12.3.1中Axios请求Network Error的问题
我之前也碰到过类似iOS老版本跨域请求的坑,结合你的环境配置和症状,大概率是这几个原因导致的,咱们一步步排查解决:
1. CORS通配符与带自定义头/ Cookie请求的冲突
虽然你提到跨域Cookie读取正常,但iOS 12.x的WebKit内核对Access-Control-Allow-Origin: *的处理非常严格——当请求带有自定义头(比如你的X-AUTH-TOKEN、X-DEVICE-ID)或涉及Cookie时,通配符*是不被允许的,必须指定具体的前端域名。
修改Symfony的CORS配置:
// 替换通配符为明确的前端子域名 $response->headers->set('Access-Control-Allow-Origin', 'https://my.example.com'); // 多域名场景可以动态匹配请求Origin(可选) // $origin = $request->headers->get('Origin'); // $allowedOrigins = ['https://my.example.com']; // if (in_array($origin, $allowedOrigins)) { // $response->headers->set('Access-Control-Allow-Origin', $origin); // } // 必须明确添加允许携带凭证的声明,老iOS WebKit依赖这个 $response->headers->set('Access-Control-Allow-Credentials', 'true');
同时更新Axios配置:
确保请求开启携带凭证的选项:
axios.create({ baseURL: `${process.env.REACT_APP_API_HOST}${process.env.REACT_APP_API_URI_PREFIX}`, withCredentials: true, // 新增这个配置 headers: { 'Content-Type': 'application/json', Accept: 'application/json', 'X-AUTH-TOKEN': token, 'X-DEVICE-ID': deviceId } })
2. TLS版本兼容性问题
iOS 12.3.1只支持到TLS 1.2,如果你的API服务器仅启用了TLS 1.3,就会直接导致请求失败。可以用命令行验证服务器的TLS支持:
openssl s_client -connect example.com:443 -tls1_2
如果连接失败,需要在服务器(Nginx/Apache等)配置中启用TLS 1.2协议。
3. 自定义头的CORS声明问题
iOS 12.x的WebKit对Access-Control-Allow-Headers: *的通配符支持不完善,建议明确列出所有自定义请求头:
$response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Accept, X-AUTH-TOKEN, X-DEVICE-ID');
4. Axios版本兼容性
部分新版Axios已经停止对iOS 12的支持,建议降级到已知兼容的版本(比如0.21.4),或者升级到最新稳定版后测试。
先从第1点的CORS配置修改入手,这是老iOS跨域问题最常见的诱因,之后再依次排查TLS版本、头声明和Axios版本,应该就能解决问题了。
内容的提问来源于stack exchange,提问作者user10788387
相关产品推荐
相关产品推荐

