React Native中XMLHttpRequest的Authorization头丢失求助
核心排查点与解决步骤
修正Authorization头格式
你代码里的Bearer: ${token}格式不符合RFC规范,标准Bearer令牌格式应为Bearer ${token}(无冒号)。部分网关或服务器会因格式错误直接丢弃该请求头,修正后代码如下:xhr = new XMLHttpRequest(); xhr.open("GET", "https://mydomain.com/testuser", true); // 确保使用完整URL(包含协议) xhr.setRequestHeader("Accept", "text/event-stream"); xhr.setRequestHeader("Cache-Control", "no-cache"); xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); // 移除Bearer后的冒号,使用标准格式 xhr.setRequestHeader("authorization", `Bearer ${this.authorizationToken}`);注意:你代码中声明的变量是
xhr,但设置请求头用的是this._xhr,若二者不是同一对象,会导致请求头未被正确设置,需确认变量引用一致性。检查网关层(如Envoy)配置
从服务器接收的请求头可见存在Envoy代理,部分网关默认会对Authorization这类敏感头做过滤,需确认生产环境的网关规则是否允许Authorization头透传至后端服务。验证Android网络安全配置
在Android项目的res/xml/network_security_config.xml中,确保生产域名的配置未限制自定义头传递:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">mydomain.com</domain> </domain-config> </network-security-config>同时确认
AndroidManifest.xml中已引用该配置:<application ... android:networkSecurityConfig="@xml/network_security_config">确认服务器CORS配置
生产服务器需在响应头中明确允许Authorization头,避免RN因预检请求(OPTIONS)不通过而丢弃该头:Access-Control-Allow-Headers: Authorization, Accept, Cache-Control, X-Requested-With Access-Control-Allow-Origin: 你的RN应用域名/IP
原因分析
- RN Android底层依赖OkHttp,部分代理网关(如Envoy)对敏感头存在默认限制规则;
- 非标准的Authorization头格式被服务器/网关判定为无效并丢弃;
- 生产环境的网络安全策略或CORS规则较本地环境更严格,拦截了敏感头;
- 变量引用不一致(
xhrvsthis._xhr)可能导致请求头未被设置。
内容的提问来源于stack exchange,提问作者Question Master
相关产品推荐
相关产品推荐

