Firebase Hosting重写配置导致POST请求体为空问题求助
解决Firebase Hosting自定义子域名POST请求体为空的问题
以下是针对你遇到问题的具体排查和解决思路:
检查自定义域名SSL配置
确保自定义子域名已通过Firebase官方完成验证,并且SSL证书处于生效状态。如果存在HTTP到HTTPS的强制重定向配置不当,可能会导致请求体在转发过程中丢失。可以在Firebase控制台的Hosting > 域名页面确认证书状态,避免使用第三方代理或未验证的域名配置。确认云函数的请求体解析逻辑
如果你的webhook云函数使用Express框架,必须显式添加请求体解析中间件,否则无法正确读取POST请求体:const express = require('express'); const functions = require('firebase-functions'); const app = express(); // 关键:添加JSON请求体解析中间件 app.use(express.json()); app.post('/', (req, res) => { console.log('请求体:', req.body); res.sendStatus(200); }); exports.webhook = functions.https.onRequest(app);若直接使用Firebase原生HTTP函数,需手动读取并解析请求体:
const functions = require('firebase-functions'); exports.webhook = functions.https.onRequest(async (req, res) => { if (req.method === 'POST') { // 显式读取请求体内容 const rawBody = await req.text(); try { const body = JSON.parse(rawBody); console.log('解析后的请求体:', body); } catch (err) { console.error('请求体解析失败:', err); } } res.sendStatus(200); });验证请求的Content-Type头
确认发送POST请求时,已正确设置Content-Type: application/json(若请求体为JSON格式)。部分客户端在自定义域名下可能未自动携带该头,导致Firebase Hosting无法识别请求体格式,进而无法传递给云函数。排查重写与缓存规则冲突
虽然你的重写规则顺序正确(优先匹配/api/webhook),但可以尝试为API路径添加缓存禁用规则,避免缓存机制干扰POST请求:"headers": [ { "source": "/api/**", "headers": [ { "key": "Cache-Control", "value": "no-cache, no-store, must-revalidate" } ] } ]查看Firebase日志定位问题
前往Firebase控制台的云函数日志页面,对比自定义域名和原生Firebase URL的请求日志,重点查看请求头、请求体的传递差异。如果日志显示自定义域名的请求体为空,说明问题出在Hosting的转发环节;若日志中有请求体,则问题出在函数的解析逻辑。
内容的提问来源于stack exchange,提问作者njho
相关产品推荐
相关产品推荐

