11from ssl import SSLContext
2- from typing import Optional , Tuple , cast
2+ from typing import List , Optional , Tuple , cast
33
44from .._backends .auto import AsyncBackend , AsyncLock , AsyncSocketStream , AutoBackend
55from .._exceptions import ConnectError , ConnectTimeout
@@ -23,6 +23,7 @@ class AsyncHTTPConnection(AsyncHTTPTransport):
2323 def __init__ (
2424 self ,
2525 origin : Origin ,
26+ http1 : bool = True ,
2627 http2 : bool = False ,
2728 uds : str = None ,
2829 ssl_context : SSLContext = None ,
@@ -32,15 +33,21 @@ def __init__(
3233 backend : AsyncBackend = None ,
3334 ):
3435 self .origin = origin
36+ self .http1 = http1
3537 self .http2 = http2
3638 self .uds = uds
3739 self .ssl_context = SSLContext () if ssl_context is None else ssl_context
3840 self .socket = socket
3941 self .local_address = local_address
4042 self .retries = retries
4143
42- if self .http2 :
43- self .ssl_context .set_alpn_protocols (["http/1.1" , "h2" ])
44+ alpn_protocols : List [str ] = []
45+ if http1 :
46+ alpn_protocols .append ("http/1.1" )
47+ if http2 :
48+ alpn_protocols .append ("h2" )
49+
50+ self .ssl_context .set_alpn_protocols (alpn_protocols )
4451
4552 self .connection : Optional [AsyncBaseHTTPConnection ] = None
4653 self .is_http11 = False
@@ -147,7 +154,7 @@ def _create_connection(self, socket: AsyncSocketStream) -> None:
147154 logger .trace (
148155 "create_connection socket=%r http_version=%r" , socket , http_version
149156 )
150- if http_version == "HTTP/2" :
157+ if http_version == "HTTP/2" or ( self . http2 and not self . http1 ) :
151158 from .http2 import AsyncHTTP2Connection
152159
153160 self .is_http2 = True
0 commit comments