Add configurable HTTP/2 connection window (#36920)

This commit is contained in:
Eric Zhang
2026-08-29 13:18:42 +08:00
committed by GitHub
parent 3760296be8
commit 3904b309db
4 changed files with 27 additions and 1 deletions
@@ -80,6 +80,11 @@ def handle_ssl_validation(server_args: Any):
raise ValueError(
"--http2-max-concurrent-streams must be between 1 and " "4294967295."
)
if not 1024 <= cfg.http2_initial_connection_window_size < 2**31:
raise ValueError(
"--http2-initial-connection-window-size must be between "
"1024 and 2147483647."
)
try:
import granian # noqa: F401
+9 -1
View File
@@ -2445,6 +2445,7 @@ def _run_granian_server(
port,
log_level,
http2_max_concurrent_streams,
http2_initial_connection_window_size,
tokenizer_worker_num=1,
ssl_certfile=None,
ssl_keyfile=None,
@@ -2482,7 +2483,8 @@ def _run_granian_server(
interface=Interfaces.ASGI,
http=HTTPModes.auto,
http2_settings=HTTP2Settings(
max_concurrent_streams=http2_max_concurrent_streams
initial_connection_window_size=http2_initial_connection_window_size,
max_concurrent_streams=http2_max_concurrent_streams,
),
log_level=log_level,
ssl_cert=ssl_certfile,
@@ -2617,6 +2619,9 @@ def _setup_and_run_http_server(
http2_max_concurrent_streams=(
server_args.http2_max_concurrent_streams
),
http2_initial_connection_window_size=(
server_args.http2_initial_connection_window_size
),
ssl_certfile=server_args.ssl_certfile,
ssl_keyfile=server_args.ssl_keyfile,
ssl_ca_certs=server_args.ssl_ca_certs,
@@ -2707,6 +2712,9 @@ def _setup_and_run_http_server(
http2_max_concurrent_streams=(
server_args.http2_max_concurrent_streams
),
http2_initial_connection_window_size=(
server_args.http2_initial_connection_window_size
),
tokenizer_worker_num=server_args.tokenizer_worker_num,
ssl_certfile=server_args.ssl_certfile,
ssl_keyfile=server_args.ssl_keyfile,
+8
View File
@@ -1283,6 +1283,14 @@ class ServerArgs:
"connection (1 to 2^32 - 1). Only applies with --enable-http2.",
NS("serving"),
] = 200
http2_initial_connection_window_size: A[
int,
"Initial connection-level HTTP/2 receive window in bytes (1024 to "
"2^31 - 1). Only applies with --enable-http2.",
NS("serving"),
] = (
1024 * 1024
)
# -------------------------------------------------------------------------
# SSL/TLS
@@ -31,9 +31,14 @@ class TestGranianHTTP2Config(unittest.TestCase):
port=30000,
log_level="info",
http2_max_concurrent_streams=37,
http2_initial_connection_window_size=8 * 1024 * 1024,
)
self.assertEqual(configured["http2_settings"].max_concurrent_streams, 37)
self.assertEqual(
configured["http2_settings"].initial_connection_window_size,
8 * 1024 * 1024,
)
if __name__ == "__main__":