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

當 HTTP/2 框架已部分寫入時,Tomcat 會等待寫入額外資料的毫秒數。負值將視為無限逾時。如果未指定,將使用預設值 5000

HTTP/2 升級通訊協定也會繼承下列限制,來自於它所嵌套的 HTTP Connector

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

巢狀元件

此元件不支援任何嵌套元件。

特殊功能

此元件不支援任何特殊功能。