如何在Undertow上的Lucee请求响应中支持Transfer-Encoding: chunked
问题描述
需求
能够接收并处理带有Transfer-Encoding = chunked请求头的请求,页面返回几KB的JSON文本。
当前现象
- 不带
Transfer-Encoding请求头的请求可正常响应 - 带有
Transfer-Encoding = chunked的请求会加载至IIS返回超时提示(附截图)
测试环境
- IIS 10,已启用分块传输(附截图)
- Lucee 6,运行于通过Commandbox启动的Undertow服务器,通过BonCode连接器与IIS连接
测试请求
curl --request POST \ --url http://myDomain/myPage \ --header 'accept: application/json' \ --header 'content-type: application/x-www-form-urlencoded' \ --header 'transfer-encoding: chunked' \ --data lang=it_IT
即使是仅包含以下代码的简单.cfm文件也存在该问题:
writeOutput( "hello" ); abort;
排查进展
从连接器日志可见,请求头和数据已转发至Undertow,但后续无任何操作直至请求被取消,最后一步操作是BonCodeAJP13.ServerPackets.BonCodeAJP13ForwardRequest,即向Undertow发送表单数据。
解决方案建议
1. 配置BonCode连接器启用分块请求支持
打开BonCodeAJP13.settings配置文件,确认并设置:
EnableChunkedRequests=True
修改后重启IIS和BonCode服务,验证分块请求是否正常。
2. 开启Undertow的分块编码支持
在Commandbox的server.json中添加Undertow相关配置:
{ "undertow": { "server": { "httpListener": { "allowChunkedEncoding": true } } } }
保存后重启Commandbox的Undertow服务器。
3. 更新BonCode连接器至最新版本
AJP 1.3协议对分块传输的原生支持有限,新版本BonCode连接器通常会修复此类协议适配问题。下载最新版替换现有连接器,重启相关服务后测试。
4. 调整Lucee的请求处理参数
登录Lucee管理员后台,进入「服务器设置 -> 请求」,检查并调整以下参数:
- 最大请求体大小
- 分块请求缓冲区大小
确保参数值足够容纳测试请求,调整后重启Lucee服务。
5. 启用Undertow详细请求日志排查
在Commandbox的server.json中添加日志配置:
{ "logging": { "level": "DEBUG", "categories": { "io.undertow.request": "DEBUG" } } }
重启服务器后重新发送分块请求,查看Undertow日志中是否有请求解析异常或阻塞的相关信息,定位具体问题点。
内容的提问来源于stack exchange,提问作者Paolo
相关产品推荐
相关产品推荐

