hyper
hyper copied to clipboard
HTTP11Connection does not use http/1.1 protocol
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: https://github.com/python-hyper/hyper/blob/bc0738bdf7afdc1236e8154868352b58850fdf1a/hyper/tls.py#L114
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?