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

Firebase自定义域名下Google Cloud Function无法获取请求头问题

解决Firebase自定义域名下Cloud Function无法获取请求头的问题

我之前也踩过这个坑!当用Firebase自定义域名访问Cloud Function时,请求头莫名丢失,大概率是Firebase Hosting的转发规则或者CORS配置在搞鬼,咱们一步步来搞定:

可能的原因&解决方案

1. Firebase Hosting转发时过滤了请求头

Firebase Hosting默认转发请求到Cloud Function时,会把一些自定义请求头给过滤掉。你得在firebase.json的重写规则里明确告诉它要保留哪些头:

修改你的firebase.json,在对应重写规则里加上headers配置,把你需要的请求头一一列出来:

{
  "hosting": {
    "rewrites": [
      {
        "source": "/NowShowing",
        "function": "NowShowing",
        "headers": {
          "X-Your-Custom-Header": "$request.headers.X-Your-Custom-Header",
          "Authorization": "$request.headers.Authorization"
          // 把所有你需要获取的请求头都这么配置
        }
      }
    ]
  }
}

注意这里的格式是"目标头名": "$request.headers.原请求头名",要和你实际用的请求头对应上。

2. CORS中间件没允许携带自定义头

看你代码里用到了cors,很可能是CORS配置没放开允许携带你需要的请求头。调整下CORS的配置:

const cors = require('cors')({
  origin: true, // 或者直接指定你的自定义域名,比如"https://xxx.firebaseapp.com"
  allowedHeaders: ['Content-Type', 'Authorization', 'X-Your-Custom-Header'], // 列出所有需要的请求头
  credentials: true
});

exports.NowShowing = functions.https.onRequest((request, response) => {
  cors(request, response, () => {
    // 这里要注意:Node.js里request.headers的键都是小写的!
    const requiredHeader = request.headers['x-your-custom-header'];
    if (!requiredHeader) {
      return response.status(400).send('Missing required header');
    }
    // 接下来就可以正常执行你的业务逻辑啦
    response.send('All good!');
  });
});

别踩大小写的坑,比如你前端传的是X-Your-Custom-Header,后端要拿request.headers['x-your-custom-header']才行。

3. 缓存策略搞的鬼

有时候Firebase Hosting的缓存会篡改或者忽略请求头,给你的路由加上不缓存的配置:

{
  "hosting": {
    "headers": [
      {
        "source": "/NowShowing",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache, no-store, must-revalidate"
          }
        ]
      }
    ]
  }
}

最后验证下

  1. 先部署Hosting的配置:firebase deploy --only hosting
  2. 再重新部署你的Function:firebase deploy --only functions:NowShowing
  3. 用curl或者Postman测一下自定义域名的请求,带上需要的头,应该就能正常获取了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:35