Cloudflare Apps Webhooks无法工作,报JSON输入意外结束错误求助
解决Cloudflare实现Webhooks与Trebble通信失败的JSON解析错误
我之前也碰到过类似Cloudflare代理Webhook时和第三方服务通信失败的问题,你遇到的"unexpected end of JSON input"错误其实是很典型的请求体损坏/不完整导致的,给你梳理几个核心排查方向和解决办法:
1. 检查Cloudflare的缓存与请求改写规则
Cloudflare的默认优化规则很可能干扰了Webhook的POST请求体:
- 给你的Webhook专属路径添加一条Page Rule,设置「缓存级别:绕过缓存」,避免Cloudflare把动态JSON请求当成静态内容缓存或截断。
- 关闭该路径下的「自动Minify」功能,Minify对JSON内容的处理可能会破坏格式。
- 如果开启了「Rocket Loader」,建议针对Webhook路径禁用,这个功能主要优化前端资源,会干扰POST请求的内容传输。
2. 排查请求体是否被拦截或截断
这个错误最直接的原因是服务端接收到的JSON请求体为空或不完整:
- 在你的服务端添加日志,打印接收到的原始请求体和请求头,确认是否真的没有拿到完整内容。
- 检查Cloudflare的**WAF(Web应用防火墙)**规则,看看有没有误拦截Webhook请求。可以临时关闭WAF测试,或者给Webhook路径添加WAF例外规则。
- 查看Cloudflare的请求日志(Analytics > Traffic),观察请求的
Request Body Size是否正常,有没有出现异常的状态码(比如4xx/5xx)。
3. 确认Content-Type请求头正确性
JSON解析失败经常和请求头不匹配有关:
- 确认Trebble发送的Webhook请求中,
Content-Type头是application/json(允许带charset参数,比如application/json; charset=utf-8)。 - 在Cloudflare的规则中,确保没有修改或移除这个请求头,避免服务端因为头不正确而拒绝解析请求体。
4. 检查SSL/TLS配置
如果Cloudflare和你的服务端之间的SSL连接有问题,会导致请求中途中断:
- 查看Cloudflare的SSL/TLS模式设置:如果你的服务端有有效SSL证书,选「完全」模式;如果没有,选「灵活」模式(不推荐生产环境)。
- 确保你的服务端SSL证书没有过期,并且能被Cloudflare正常验证。
快速调试小技巧
- 用
curl模拟Trebble的Webhook请求,直接发送到你的服务端IP(绕过Cloudflare),如果能正常解析,说明问题肯定在Cloudflare的配置上;如果还是报错,那就是你服务端的JSON解析逻辑有问题。 - 比如模拟请求命令:
curl -X POST https://your-server-domain/webhook-path \ -H "Content-Type: application/json" \ -d '{"test": "data"}'
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

