Add configurable HTTP/2 connection window (#36920)
This commit is contained in:
@@ -80,6 +80,11 @@ def handle_ssl_validation(server_args: Any):
|
|||||||
raise ValueError(
|
raise ValueError(
|
||||||
"--http2-max-concurrent-streams must be between 1 and " "4294967295."
|
"--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:
|
try:
|
||||||
import granian # noqa: F401
|
import granian # noqa: F401
|
||||||
|
|||||||
@@ -2445,6 +2445,7 @@ def _run_granian_server(
|
|||||||
port,
|
port,
|
||||||
log_level,
|
log_level,
|
||||||
http2_max_concurrent_streams,
|
http2_max_concurrent_streams,
|
||||||
|
http2_initial_connection_window_size,
|
||||||
tokenizer_worker_num=1,
|
tokenizer_worker_num=1,
|
||||||
ssl_certfile=None,
|
ssl_certfile=None,
|
||||||
ssl_keyfile=None,
|
ssl_keyfile=None,
|
||||||
@@ -2482,7 +2483,8 @@ def _run_granian_server(
|
|||||||
interface=Interfaces.ASGI,
|
interface=Interfaces.ASGI,
|
||||||
http=HTTPModes.auto,
|
http=HTTPModes.auto,
|
||||||
http2_settings=HTTP2Settings(
|
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,
|
log_level=log_level,
|
||||||
ssl_cert=ssl_certfile,
|
ssl_cert=ssl_certfile,
|
||||||
@@ -2617,6 +2619,9 @@ def _setup_and_run_http_server(
|
|||||||
http2_max_concurrent_streams=(
|
http2_max_concurrent_streams=(
|
||||||
server_args.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_certfile=server_args.ssl_certfile,
|
||||||
ssl_keyfile=server_args.ssl_keyfile,
|
ssl_keyfile=server_args.ssl_keyfile,
|
||||||
ssl_ca_certs=server_args.ssl_ca_certs,
|
ssl_ca_certs=server_args.ssl_ca_certs,
|
||||||
@@ -2707,6 +2712,9 @@ def _setup_and_run_http_server(
|
|||||||
http2_max_concurrent_streams=(
|
http2_max_concurrent_streams=(
|
||||||
server_args.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,
|
tokenizer_worker_num=server_args.tokenizer_worker_num,
|
||||||
ssl_certfile=server_args.ssl_certfile,
|
ssl_certfile=server_args.ssl_certfile,
|
||||||
ssl_keyfile=server_args.ssl_keyfile,
|
ssl_keyfile=server_args.ssl_keyfile,
|
||||||
|
|||||||
@@ -1283,6 +1283,14 @@ class ServerArgs:
|
|||||||
"connection (1 to 2^32 - 1). Only applies with --enable-http2.",
|
"connection (1 to 2^32 - 1). Only applies with --enable-http2.",
|
||||||
NS("serving"),
|
NS("serving"),
|
||||||
] = 200
|
] = 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
|
# SSL/TLS
|
||||||
|
|||||||
@@ -31,9 +31,14 @@ class TestGranianHTTP2Config(unittest.TestCase):
|
|||||||
port=30000,
|
port=30000,
|
||||||
log_level="info",
|
log_level="info",
|
||||||
http2_max_concurrent_streams=37,
|
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"].max_concurrent_streams, 37)
|
||||||
|
self.assertEqual(
|
||||||
|
configured["http2_settings"].initial_connection_window_size,
|
||||||
|
8 * 1024 * 1024,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user