:attr:`ssl.SSLContext.post_handshake_auth` for the default *context* or
when *cert_file* is passed with a custom *context*.
+ .. versionchanged:: 3.10
+ This class now sends an ALPN extension with protocol indicator
+ ``http/1.1`` when no *context* is given. Custom *context* should set
+ ALPN protocols with :meth:`~ssl.SSLContext.set_alpn_protocol`.
+
.. deprecated:: 3.6
*key_file* and *cert_file* are deprecated in favor of *context*.
.. versionchanged:: 3.4.3
*context* was added.
+ .. versionchanged:: 3.10
+ HTTPS connection now send an ALPN extension with protocol indicator
+ ``http/1.1`` when no *context* is given. Custom *context* should set
+ ALPN protocols with :meth:`~ssl.SSLContext.set_alpn_protocol`.
+
.. deprecated:: 3.6
*cafile*, *capath* and *cadefault* are deprecated in favor of *context*.
self.cert_file = cert_file
if context is None:
context = ssl._create_default_https_context()
+ # send ALPN extension to indicate HTTP/1.1 protocol
+ if self._http_vsn == 11:
+ context.set_alpn_protocols(['http/1.1'])
# enable PHA for TLS 1.3 connections if available
if context.post_handshake_auth is not None:
context.post_handshake_auth = True
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH,
cafile=cafile,
capath=capath)
+ # send ALPN extension to indicate HTTP/1.1 protocol
+ context.set_alpn_protocols(['http/1.1'])
https_handler = HTTPSHandler(context=context)
opener = build_opener(https_handler)
elif context:
--- /dev/null
+:mod:`urllib.request` and :mod:`http.client` now send ``http/1.1`` ALPN
+extension during TLS handshake when no custom context is supplied.