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

Firebase Hosting转发至Cloud Run时Authorization头丢失问题排查

问题

iOS客户端请求Cloudflare托管的域名,经Firebase Hosting转发至GCP Cloud Run服务,但Cloud Run上的Golang后端在获取Authorization请求头时出现概率性丢失的情况——部分请求能正常获取,部分则无法获取。结合下方Firebase Hosting的firebase.json配置及后端获取头信息的代码片段,请问是否是Firebase无法转发Authorization头导致该问题?

Firebase Hosting 配置

{
  "target": "xxx",
  "public": "dist",
  "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
  "rewrites": [
    {
      "source": "/api/:path*",
      "run": {
        "serviceId": "xxx",
        "region": "asia-northeast1"
      }
    },
    {
      "source": "**",
      "destination": "/index.html"
    }
  ]
}

Golang 后端代码片段

func Authentication(db *gorm.DB, firebaseClient firebase.Client) func(next http.Handler) http.Handler {
    return func(next http.Handler) http.Handler {
        fn := func(w http.ResponseWriter, r *http.Request) {
            var (
                idToken  = r.Header.Get("Authorization")
                user     = &models.User{}
                language = r.Header.Get("Accept-Language")
            )

            // 检查Authorization头是否为空
            if idToken == "" {
                w.WriteHeader(http.StatusUnauthorized)
                logger.MethodError(r.Context(), "svc.idToken.first.null", logrus.Fields{"err": "id token is null", "header": r.Header})
                helpers.RenderFailureJSON(w, http.StatusUnauthorized, errcode.ErrorNotLogin.Msg(language))
                return
            }

            r = helpers.SetCurrentUser(r, user)
            next.ServeHTTP(w, r)
        }
        return http.HandlerFunc(fn)
    }
}
解答

Firebase Hosting默认会转发Authorization请求头,你的firebase.json配置没有禁用该头的转发逻辑,所以单纯Firebase配置不是导致Authorization头概率性丢失的原因。需要从以下几个方向排查问题:

  • Cloudflare层面的干扰:
    Cloudflare的缓存规则如果覆盖了/api路径,可能会对部分请求进行缓存,或者WAF安全规则在特定场景下移除了Authorization头。建议检查Cloudflare的缓存策略、WAF规则,确认是否存在修改或丢弃该请求头的配置。

  • iOS客户端的请求异常:
    概率性问题大概率和客户端逻辑有关,比如网络波动导致请求重发时未重新携带Authorization头,或者token刷新流程存在漏洞,导致部分请求漏带头信息。可以在客户端添加请求日志,验证每次请求是否都正确携带了该头。

  • Firebase Hosting边缘节点偶发异常:
    虽然概率极低,但Firebase边缘节点可能出现临时故障导致请求头丢失。可以尝试重新部署Firebase Hosting配置,同时查看Firebase的请求日志,确认转发到Cloud Run的请求是否携带了Authorization头。

  • Golang后端的头处理逻辑问题:
    检查Authentication中间件之前是否有其他中间件修改或移除了Authorization头。另外,原代码中日志输出的hedaer是拼写错误,建议修正后查看完整的请求头日志——如果日志显示请求到达后端时确实没有Authorization头,说明问题出在转发或客户端;如果日志中存在该头但代码获取不到,可能是后端解析逻辑有问题。


内容的提问来源于Stack Exchange,提问作者Nicholas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:46:17