最近在研究HTTP2协议,想用Python实现一下服务端。但是网络上所相传的通过字段 Upgrade: h2c 所请求升级到http2根本没用。
因为浏览器只支持加密的http2,而h2c是http2 cleartext(明文http2),所以没有用。
Python docs – ssl.SSLContext.set_alpn_protocols
该文档讲述了加密的http2如何使得服务器在 ALPN 发送报文时告诉客户端服务器所支持的协议
(即当你创建了一个 SSLContext 对象之后可以指定其对客户端返回的支持协议
—下面是Python文档原文
ssl
— 套接字对象的 TLS/SSL 包装器SSLContext.set_alpn_protocols
(protocols)
指定在 SSL/TLS 握手期间套接字应当通告的协议。 它应为由 ASCII 字符串组成的列表,例如['http/1.1', 'spdy/2']
,按首选顺序排列。 协议的选择将在握手期间发生,并依据 RFC 7301 来执行。 在握手成功后,SSLSocket.selected_alpn_protocol()
方法将返回已达成一致的协议。
如果HAS_ALPN
为False
则此方法将引发NotImplementedError
。
3.5 新版功能.
还有一个很有意思的函数,SSLSocket.selected_alpn_protocol
,它在Socket连接建立之后调用会返回客户端所选用的协议。
—下面是Python文档原文
ssl
— 套接字对象的 TLS/SSL 包装器SSLSocket.selected_alpn_protocol
()
返回在 TLS 握手期间所选择的协议。 如果SSLContext.set_alpn_protocols()
未被调用,如果另一方不支持 ALPN,如果此套接字不支持任何客户端所用的协议,或者如果握手尚未发生,则将返回None
。
3.5 新版功能.