HTTP2 升级协议

目录

介绍

HTTP 升级协议元素表示支持 HTTP/2 协议的升级协议组件。此组件的实例必须与现有的 HTTP/1.1 连接器 关联。

HTTP/2 连接器使用非阻塞 I/O,仅在有数据需要读写时才从线程池中使用容器线程。但是,由于 Servlet API 基本上是阻塞的,因此每个 HTTP/2 流在该流持续期间都需要一个专用的容器线程。

使用 HTTP/2 处理的请求将具有以下附加请求属性

  • org.apache.coyote.connectionID 将返回 HTTP/2 连接 ID
  • org.apache.coyote.streamID 将返回 HTTP/2 流 ID

属性

通用属性

升级协议的所有实现都支持以下属性

属性 说明
className

必须是 org.apache.coyote.http2.Http2Protocol

标准实现

除了上面列出的通用属性外,HTTP/2 升级协议实现还支持以下属性。

属性 说明
initialWindowSize

控制 Tomcat 向客户端通告的流的流控制窗口的初始大小。如果未指定,则使用默认值 65535

keepAliveTimeout

在没有活动流的情况下,Tomcat 在关闭连接之前等待 HTTP/2 帧之间的时间(以毫秒为单位)。负值将被视为无限超时。如果未指定,则使用默认值 20000

maxConcurrentStreamExecution

控制可以从容器线程池中分配线程的任何一个连接的最大流数。如果活动流多于可用线程,这些流将不得不等待流变为可用状态。如果未指定,将使用默认值 20

maxConcurrentStreams

控制允许的任何一个连接的最大活动流数。如果客户端尝试打开多于此限制的活动流,则将使用 STREAM_REFUSED 错误重置流。如果未指定,将使用默认值 100

maxHeaderCount

容器允许的请求中的最大标头数。将拒绝包含多于指定限制的标头的请求。小于 0 的值表示没有限制。如果未指定,将使用默认值 100。

maxTrailerCount

容器允许的请求中的最大尾部标头数。将拒绝包含多于指定限制的尾部标头的请求。小于 0 的值表示没有限制。如果未指定,将使用默认值 100。

overheadContinuationThreshold

非最终 CONTINUATION 帧的有效负载大小低于此阈值将触发开销计数增加(请参阅 overheadCountFactor)。开销计数将增加 overheadContinuationThreshold/payloadSize,因此 CONTINUATION 帧越小,开销计数增加得越多。值为零或更小将禁用对非最终 CONTINUATION 帧的检查。如果未指定,将使用默认值 1024

overheadCountFactor

在计算开销帧以确定连接的开销是否过高且应关闭时应用的因子。开销计数从 -10 * overheadCountFactor 开始。对于发送或接收的每个数据帧和接收的每个标头帧,计数减少 20。对于接收的每个设置、优先级、优先级更新和 ping 帧,计数增加 overheadCountFactor。如果开销计数超过零,则连接关闭。小于 1 的值将禁用此保护。在正常使用中,大约 20 或更高的值将在任何流完成之前关闭连接。如果未指定,将使用默认值 10

overheadResetFactor

对于接收的每个重置帧,开销计数(请参阅 overheadCountFactor)增加的数量。如果未指定,将使用默认值 50。小于零的值将被视为零。

overheadDataThreshold

低于此阈值的当前和之前的非最终 DATA 帧的平均有效负载大小将触发开销计数的增加(参见 overheadCountFactor)。开销计数将增加 overheadDataThreshold/average,因此平均值越小,开销计数的增加幅度越大。值为零或更小将禁用对非最终 DATA 帧的检查。如果未指定,将使用 1024 的默认值。

overheadWindowUpdateThreshold

低于此阈值的当前和之前的 WINDOW_UPDATE 帧的平均大小将触发开销计数的增加(参见 overheadCountFactor)。开销计数将增加 overheadWindowUpdateThreshold/average,因此平均值越小,开销计数的增加幅度越大。值为零或更小将禁用对 WINDOW_UPDATE 帧的检查。如果未指定,将使用 1024 的默认值。

readTimeout

当收到部分 HTTP/2 帧时,Tomcat 将等待其他数据的毫秒数。负值将被视为无限超时。如果未指定,将使用 5000 的默认值。

streamReadTimeout

当应用程序执行阻塞 I/O 读取且需要其他数据时,Tomcat 将等待流到达其他数据帧的毫秒数。负值将被视为无限超时。如果未指定,将使用 20000 的默认值。

streamWriteTimeout

当应用程序执行阻塞 I/O 写入且流和/或连接流控制窗口对于写入完成而言过小时,Tomcat 将等待流和/或连接到达其他窗口更新帧的毫秒数。负值将被视为无限超时。如果未指定,将使用 20000 的默认值。

useSendfile

使用此布尔属性启用或禁用 sendfile 功能。默认值为 true

如果关联的 ConnectoruseAsyncIO 属性设置为 false,则忽略此设置并禁用 sendfile 功能。

HTTP/2 sendfile 功能使用 MappedByteBuffer,已知它会导致 Windows 上的文件锁定。

writeTimeout

Tomcat 在 HTTP/2 帧部分写入时等待写入其他数据的时间(以毫秒为单位)。负值将被视为无限超时。如果未指定,将使用默认值 5000

HTTP/2 升级协议还将继承嵌套的 HTTP 连接器 中的以下限制

  • allowedTrailerHeaders
  • compressibleMimeType
  • compression
  • compressionMinSize
  • maxCookieCount
  • maxHttpHeaderSize
  • maxHttpRequestHeaderSize
  • maxParameterCount
  • maxPostSize
  • maxSavePostSize
  • maxTrailerSize
  • noCompressionUserAgents

嵌套组件

此组件不支持任何嵌套组件。

特殊功能

此组件不支持任何特殊功能。