HTTP11Connection does not use http/1.1 protocol
nqbao opened this issue · comments
Sample code
try:
conn = HTTP11Connection('www.cloudflare.com:443', secure=True)
req = conn.request('GET', '/')
rep = conn.get_response() # <-- this will raise TLSUpgrade exception
except Exception as ex:
print(ex.negotiated) # <-- this will print h2
Expected behavior is to use http/1.1 protocol.
I found the issue: if we don't supply the ssl context, it will use the default ssl context, which use h2 by default:
Line 114 in bc0738b
The only way to force http/1.1 is to supply your own ssl context like below:
from hyper.tls import init_context
ssl_context = init_context()
ssl_context.set_alpn_protocols(["http/1.1"])
try:
conn = HTTP11Connection('www.cloudflare.com:443', secure=True, ssl_context=ssl_context)
req = conn.request('GET', '/')
rep = conn.get_response() # now it works
except Exception as ex:
print(ex) # <-- this will print h2
I think HTTP11Connection should works without providing the ssl context. One way to fix this is to have another ssl context for HTTP11Connection. What do you think?