You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中XMLHttpRequest的Authorization头丢失求助

解决方案:React Native Android XMLHttpRequest SSE 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
    

原因分析

  1. RN Android底层依赖OkHttp,部分代理网关(如Envoy)对敏感头存在默认限制规则;
  2. 非标准的Authorization头格式被服务器/网关判定为无效并丢弃;
  3. 生产环境的网络安全策略或CORS规则较本地环境更严格,拦截了敏感头;
  4. 变量引用不一致(xhr vs this._xhr)可能导致请求头未被设置。

内容的提问来源于stack exchange,提问作者Question Master

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:40:28