使用Ktor的大HTTP头



我们的Ktor应用程序客户端发送的标头大于8KB。这些请求被KTor服务器引擎以HTTP 400拒绝。到目前为止,我已经尝试了Netty和Tomcat,它们都以HTTP 400状态失败。使用Tomcat引擎,这个错误更明显,因为来自Tomcat的响应包含文本:java.lang.IllegalArgumentException: Request header is too large。我已经尝试了https://youtrack.jetbrains.com/issue/KTOR-27中建议的配置。配置参数maxHeaderLength不工作。这是相关PR https://github.com/ktorio/ktor/pull/2490中提出的建议。我使用Ktor 1.6.8版本。我怎样才能让我的Ktor应用程序与大标题工作,像标题与近16000个字符?

您可以配置Netty引擎来提供一个HttpServerCodec对象,该对象具有所需的最大报头大小值。下面是一个例子:

embeddedServer(Netty, applicationEngineEnvironment {
connector {
port = 3333
}
module {
routing {
get("/") {
call.respondText { "Hello" }
}
}
}
}) {
httpServerCodec = {
HttpServerCodec(
HttpObjectDecoder.DEFAULT_MAX_INITIAL_LINE_LENGTH,
32 * 1024, // max header size
HttpObjectDecoder.DEFAULT_MAX_CHUNK_SIZE
)
}
}.start(true)

最新更新