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 升级协议实现除了上面列出的通用属性外,还支持以下属性。

属性描述
discardRequestsAndResponses

一个布尔值,用于启用或禁用容器内部请求和响应处理对象的回收。如果设置为 true,请求和响应对象将在每次请求后设置为垃圾回收,否则它们将被重用。如果未指定,此属性将设置为 false

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

如果关联连接器useAsyncIO 属性设置为 false,则此设置将被忽略,并且 sendfile 功能将被禁用。

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

writeTimeout

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

HTTP/2 升级协议还将继承其嵌套的HTTP 连接器的以下属性:

  • allowedTrailerHeaders
  • compressibleMimeType
  • compression
  • compressionMinSize
  • maxCookieCount
  • maxHttpHeaderSize
  • maxHttpRequestHeaderSize
  • maxParameterCount
  • maxPartCount
  • maxPartHeaderSize
  • maxPostSize
  • maxSavePostSize
  • maxTrailerSize
  • noCompressionUserAgents
  • server
  • serverRemoveAppProvidedValues

嵌套组件

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

特殊功能

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