Scopes and extensions¶
These types describe values shared by the HTTP, WebSocket, and lifespan scope contracts. Extension mappings are server metadata and should be treated as read-only; the outer scope["extensions"] mapping remains the per-scope place for an application's namespaced key.
ASGIVersionsmodule-attribute¶
ASGIVersions = HTTPASGIVersions | LifespanASGIVersions
HTTPASGIVersions¶
LifespanASGIVersions¶
Headersmodule-attribute¶
Headers = Iterable[HeaderPair]
ScopeHeadersmodule-attribute¶
ScopeHeaders = list[HeaderPair]
Statemodule-attribute¶
State = dict[str, Any]
Extensionsmodule-attribute¶
Extensions = HTTPExtensions | WebSocketExtensions
HTTPExtensionsmodule-attribute¶
HTTPExtensions = TypedDict('HTTPExtensions', {'http.response.pathsend': ExtensionParameters, 'http.response.zerocopysend': NotRequired[ExtensionParameters], 'http.response.trailers': NotRequired[ExtensionParameters], 'http.response.early_hint': NotRequired[ExtensionParameters], 'tls': NotRequired[TLSExtension]})
WebSocketExtensionsmodule-attribute¶
WebSocketExtensions = TypedDict('WebSocketExtensions', {'websocket.http.response': ExtensionParameters, 'tls': NotRequired[TLSExtension]})
ExtensionParametersmodule-attribute¶
ExtensionParameters = Mapping[str, Any]
TLSExtension¶
Bases: TypedDict
The negotiated TLS parameters, under scope["extensions"]["tls"].
Present only on connections h2corn terminated itself; a connection arriving through a TLS-terminating proxy has no tls key at all.
client_cert_chain holds the certificates the peer presented, in PEM, leaf first — empty unless cert_reqs asked for one. When the chain is nonempty, client_cert_name is the leaf subject as an RFC 4514 string. client_cert_error is always None: a certificate that fails verification fails the handshake and never reaches an application.
server_certinstance-attribute¶
server_cert: str | None
client_cert_chaininstance-attribute¶
client_cert_chain: tuple[str, ...]
client_cert_nameinstance-attribute¶
client_cert_name: str | None
client_cert_errorinstance-attribute¶
client_cert_error: str | None
tls_versioninstance-attribute¶
tls_version: int | None
cipher_suiteinstance-attribute¶
cipher_suite: int | None
Extension mapping fields¶
ASGI extension keys use dotted names and map to their parameter types.
HTTPExtensions["http.response.pathsend"]¶
Advertised on HTTP scopes. The application may send http.response.pathsend when the server should open the named file as the terminal response body.
HTTPExtensions["http.response.zerocopysend"]¶
Advertised on Unix HTTP listeners. The application may send a file descriptor or range without routing its bytes through Python; see Sending a file.
HTTPExtensions["http.response.trailers"]¶
Advertised when the HTTP client sent TE: trailers; the application may then send HTTP response trailers after the body.
HTTPExtensions["http.response.early_hint"]¶
Advertised for HTTP/2 requests. The application may send RFC 8297 103 Early Hints before the final response.
HTTPExtensions["tls"]¶
Present only when h2corn terminated TLS on the connection. Its value is the TLSExtension mapping; a TLS-terminating proxy does not produce this key.
WebSocketExtensions["websocket.http.response"]¶
Advertised on every WebSocket scope. Its value is the empty ExtensionParameters mapping for the HTTP response extension.
WebSocketExtensions["tls"]¶
Present only when h2corn terminated TLS on the WebSocket connection, with the same TLSExtension value and proxy boundary as HTTP.