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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:40:03