Firebase Function部分请求未执行无日志,外部服务返回200原因排查
可能的原因及排查方向
- 函数名拼写错误:你当前导出的函数名为
notificaion,存在拼写疏漏(正确拼写应为notification,缺少1个字母t)。如果对外提供的调用URL是按照正确拼写构造,或是部署环境中存在其他同名不同拼写的函数,该特定请求可能实际命中了其他不存在/逻辑不符的函数,不会在当前notificaion函数的日志中留下记录。如果站点配置了不存在路径默认返回200的规则,外部服务就会拿到200响应但函数不会执行。 - Hosting重写规则冲突:如果该云函数绑定了Firebase Hosting做路径重写,需要检查
firebase.json中的重写规则优先级:如果优先级更高的规则(比如静态资源匹配、其他函数重写规则)先命中了该特定请求的路径,请求会被路由到其他目标,不会走到当前云函数逻辑中,对应目标返回200就会匹配你遇到的现象。 - 请求体超限被边缘节点拦截:Firebase HTTPS云函数默认有10MB的请求体大小限制,如果该特定请求的载荷超出限制,边缘节点会直接拦截请求,不会触发函数执行。如果边缘配置了拦截后兜底返回200的规则,就会出现外部服务拿到200但函数无日志的情况。
- 区域不匹配:你当前函数部署在
asia-south1区域,如果外部服务调用的URL绑定了其他区域的同函数名地址,或是多区域部署的流量分流规则把该请求分到了未部署该函数的区域,边缘节点会直接返回默认200响应,不会触发当前区域的函数执行。 - OPTIONS预检请求未被函数处理:如果该特定请求属于跨域非简单请求,调用端会先发OPTIONS预检请求,如果你没有在函数中显式处理OPTIONS请求,Firebase默认的边缘CORS处理逻辑会直接返回200响应,不会触发你编写的函数执行逻辑,自然不会打印日志。
- 访问控制规则拦截:如果你配置了云函数入站访问控制、VPC服务边界、WAF规则,符合拦截规则的特定IP、特定请求头的请求会被边缘节点直接拦截,不会走到函数执行环节,自然也不会留下函数执行日志。
内容的提问来源于stack exchange,提问作者Chamupathi Gigara Hettige
相关产品推荐
相关产品推荐

