# h3_bridge

URL: /pounce/api/asgi/h3_bridge/
Section: asgi
Description: HTTP/3 ASGI bridge — maps zoomies H3 events to ASGI scope/receive/send.

Each HTTP/3 stream maps to one ASGI invocation, similar to HTTP/2.
HTTP/3 uses QUIC (UDP) transport with TLS 1.3 built-in.

---

> For a complete page index, fetch /pounce/llms.txt.

Open LLM text
(/pounce/api/asgi/h3_bridge/index.txt)

Share with AI

Ask Claude
(https://claude.ai/new?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fpounce%2Fapi%2Fasgi%2Fh3_bridge%2Findex.txt)

Ask ChatGPT
(https://chatgpt.com/?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fpounce%2Fapi%2Fasgi%2Fh3_bridge%2Findex.txt)

Ask Gemini
(https://gemini.google.com/app?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fpounce%2Fapi%2Fasgi%2Fh3_bridge%2Findex.txt)

Ask Copilot
(https://copilot.microsoft.com/?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fpounce%2Fapi%2Fasgi%2Fh3_bridge%2Findex.txt)

Module

#
`asgi.h3_bridge`

HTTP/3 ASGI bridge — maps zoomies H3 events to ASGI scope/receive/send.

Each HTTP/3 stream maps to one ASGI invocation, similar to HTTP/2.
HTTP/3 uses QUIC (UDP) transport with TLS 1.3 built-in.

1Class3Functions

## Classes

`H3PseudoHeaderError`

0

▼

HTTP/3 request pseudo-headers are missing, duplicated, or contradictory.

Bases:

`ValueError`

HTTP/3 request pseudo-headers are missing, duplicated, or contradictory.

## Functions

`build_h3_scope`

7

`dict[str, Any]`

▼

Build an ASGI HTTP scope from HTTP/3 HeadersReceived.

Parses pseudo-headers (:…

`def build_h3_scope(headers: list[tuple[bytes, bytes]], config: ServerConfig, client: tuple[str, int], server: tuple[str, int], *, stream_id: int = 0, is_0rtt: bool = False, state: dict[str, Any] | None = None) -> dict[str, Any]`

Build an ASGI HTTP scope from HTTP/3 HeadersReceived.

Parses pseudo-headers (:method, :path, :scheme, :authority) and
builds the scope. HTTP/3 requires TLS, so scheme is always https.

##### Parameters

Name
Type
Description

`headers`
`list[tuple[bytes, bytes]]`

HTTP/3 header list from zoomies H3HeadersReceived.

`config`
`ServerConfig (/pounce/api/config/#ServerConfig)`

Server configuration.

`client`
`tuple[str, int]`

Client (host, port) from QUIC connection.

`server`
`tuple[str, int]`

Server (host, port) tuple.

`stream_id`
`int`

HTTP/3 stream ID (for extensions).

Default:`0`

`is_0rtt`
`bool`

True if request arrived via 0-RTT (replay risk).

Default:`False`

`state`
`dict[str, Any] | None`

Default:`None`

##### Returns

`dict[str, Any]`

`create_h3_receive`

2

`Receive`

▼

Create an ASGI receive callable for an HTTP/3 stream.

The protocol pushes body…

`def create_h3_receive(body_queue: asyncio.Queue[dict[str, Any]], *, timeout: float | None = None) -> Receive`

Create an ASGI receive callable for an HTTP/3 stream.

The protocol pushes body events into the queue as DataReceived arrives.

##### Parameters

Name
Type
Description

`body_queue`
`asyncio.Queue[dict[str, Any]]`

`timeout`
`float | None`

Default:`None`

##### Returns

`Receive`

`create_h3_send`

10

`Send`

▼

Create an ASGI send callable for an HTTP/3 stream.

Serializes via zoomies H3Co…

`def create_h3_send(h3_conn: H3Connection, stream_id: int, transmit: Any, state: SendState, *, timing: ServerTiming | None = None, compressor: Compressor | None = None, dictionary_hash: str | None = None, request_method: str = 'GET', request_id: str | None = None, compression_min_size: int = 0) -> Send`

Create an ASGI send callable for an HTTP/3 stream.

Serializes via zoomies H3Connection. After each send, call transmit()
to flush QUIC packets to the wire.

##### Parameters

Name
Type
Description

`h3_conn`
`H3Connection`

`stream_id`
`int`

`transmit`
`Any`

`state`
`SendState (/pounce/api/asgi/bridge/#SendState)`

`timing`
`ServerTiming (/pounce/api/_timing/#ServerTiming) | None`

Default:`None`

`compressor`
`Compressor (/pounce/api/_compression/#Compressor) | None`

Default:`None`

`dictionary_hash`
`str | None`

Default:`None`

`request_method`
`str`

Default:`'GET'`

`request_id`
`str | None`

Default:`None`

`compression_min_size`
`int`

Default:`0`

##### Returns

`Send`
