React Native中仅iOS端Axios调用GET API返回401状态码问题
iOS端Axios GET请求返回401(Bearer Token正常但Android无问题)的排查方案
检查请求头的拼写与格式一致性
确保Authorization请求头的拼写完全正确(注意首字母大写),格式严格为Bearer <token>,无多余空格或大小写错误。可以通过请求拦截器打印实际发送的请求头,对比Android和iOS的差异:axios.interceptors.request.use(config => { console.log('实际请求头:', config.headers); return config; });禁用iOS端的GET请求缓存
iOS的WKWebView默认会缓存GET请求,可能复用过期的Token。在请求中添加缓存控制头强制禁用缓存:axios.get('/target-api', { headers: { 'Authorization': `Bearer ${yourToken}`, 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' } });处理Token的特殊字符编码
如果Token包含+、/、=这类特殊字符,iOS端可能出现编码异常。尝试对Token进行URL编码后再传入请求头:const encodedToken = encodeURIComponent(yourToken); axios.get('/target-api', { headers: { 'Authorization': `Bearer ${encodedToken}` } });注意:需确认后端能正确解码编码后的Token,或提前和后端确认Token的编码要求。
升级Axios版本并排查WebView限制
旧版Axios在iOS WKWebView中可能存在请求头处理bug,尝试升级到最新稳定版:npm update axios同时检查iOS端WebView是否开启了跨域限制或内容安全策略(CSP),这类设置可能拦截Token请求头。
统一User-Agent请求头
部分后端会根据User-Agent做权限校验,iOS与Android的默认User-Agent差异可能导致校验失败。手动设置统一的User-Agent:axios.get('/target-api', { headers: { 'Authorization': `Bearer ${yourToken}`, 'User-Agent': 'YourApp/1.0.0 (Mobile Client)' } });
内容的提问来源于stack exchange,提问作者Rooban
相关产品推荐
相关产品推荐

