Revision history for Unblock-HTTP3
0.03 2026-10-04
- Require Uniform::HTTP 0.06 for its header-only native FastPath ABI.
- Inspect canonical outgoing Request and Response objects directly in XS,
avoiding Perl FastPath views and temporary HTTP/3 wire-field arrays.
- Retain decoded nghttp3 header blocks in native connection state and build
exact canonical Uniform messages directly from validated native byte spans.
- Preserve HTTP/3 semantic validation, Cookie coalescing, field-section
limits, message lifecycle state, and canonical Uniform object ownership.
- Add native-path loopback coverage and HTTP-layer microbenchmarks.
- Add a public versioned native consumer ABI for XS event frameworks and
HTTP libraries, with an installed C header and persistent Connection
context.
- Expose native service, request, Transaction polling, canonical Uniform
message access, response sending, and failure-state inspection without
exposing libnghttp3 or private storage.
0.02 2026-10-04
- Require Uniform::HTTP 0.05 and use exact canonical Uniform::HTTP::Request
and Uniform::HTTP::Response objects throughout the public HTTP message API.
- Remove the Unblock::HTTP3 Request and Response subclasses; HTTP/3
priority and stream-abort state now belong to Transaction.
- Use Uniform::HTTP::FastPath ABI 1 for outgoing wire-field access and
trusted construction of already-validated received HTTP/3 messages.
- Record local and remote RESET_STREAM and STOP_SENDING codes explicitly
on Transaction without adding transport state to Uniform message objects.
- Add RFC 9412 ORIGIN support through libnghttp3.
- Add server origins configuration and client peer_origins inspection.
- Add independent quic-go client interoperability against an
Unblock::HTTP3 server.
- Expand interoperability documentation to cover both client and server
directions.
- Add repeatable real UDP/TLS/QUIC/HTTP/3 loopback performance benchmarks.
- Add split-process benchmarks to separate client/server event-driving cost.
- Add HTTP/3-layer microbenchmarks for Uniform message construction,
wire-field preparation, field-section accounting, native nghttp3
submission, and streaming body-copy cost.
- Avoid rebuilding the connection-specific header lookup for every field,
reducing representative HTTP/3 wire-field preparation cost.
- Retain outgoing body chunks as dedicated Perl scalar storage in native
state instead of allocating and copying a second C byte buffer, while
preserving caller-mutation isolation and ACK-driven release.
- Add incoming-body microbenchmarks for native DATA events, buffered
accumulation, streaming delivery, and complete buffered construction.
- Retain owned incoming DATA scalars directly in streaming Body::Reader,
removing a second Perl string copy while preserving receive-credit and
backpressure semantics.
- Keep small buffered DATA chunks on the compact scalar path and retain
owned chunks of 16 KiB or larger until one final message-body coalescing,
reducing repeated large-body copies.
- Add a normative RFC conformance audit suite for malformed control,
QPACK, priority, push, and stream-lifecycle input.
- Treat peer closure, reset, or STOP_SENDING of critical HTTP/3 streams
as H3_CLOSED_CRITICAL_STREAM.
- Reject duplicate peer SETTINGS with H3_SETTINGS_ERROR so extension and
remembered 0-RTT state cannot become ambiguous.
- Reject unauthorized server push with H3_ID_ERROR when no push capacity
has been advertised.
- Coalesce decompressed Cookie field lines before exposing canonical
Uniform HTTP messages.
- Defer server application delivery of 0-RTT Transactions and Datagrams
until the QUIC handshake completes and the early data has not been
rejected.
- Enforce the 0-or-1 value rules for Extended CONNECT and HTTP Datagram
SETTINGS in the HTTP/3 SETTINGS inspector.
- Enforce the RFC 9297 Capsule-Protocol response-status restriction.
- Document the remaining libnghttp3 limitations for malformed-message
stream scope and RFC 9218 invalid-parameter preservation.
0.01 2026-10-04
- Start Unblock::HTTP3.
- Require released Net::QUIC 0.04 for QUIC transport and RFC 9221 DATAGRAM.
- Use Alien::nghttp3 0.01 for libnghttp3.
- Add native client and server libnghttp3 connection state.
- Add the HTTP/3 control and QPACK stream bridge.
- Use Uniform::HTTP 0.04 as the runtime HTTP message layer.
- Make Unblock::HTTP3::Request and Unblock::HTTP3::Response thin subclasses
of the canonical Uniform request and response classes.
- Accept plain Uniform::HTTP::Request objects directly for client requests.
- Use Uniform's Extended CONNECT protocol metadata, ordered trailers,
section mutability, fidelity, and completeness APIs directly.
- Move streaming-body and buffered receive progress into Transaction so a
Uniform body is exposed only when the complete buffered body is known.
- Remove the duplicate Unblock::HTTP3::_Message implementation.
- Add Unblock::HTTP3::Transaction for multiplexed request/response state.
- Add real request and response exchange over UDP, QUIC, and TLS.
- Add buffered request and response bodies.
- Add incremental outgoing bodies with ACK-driven backpressure.
- Add streaming incoming bodies with explicit QUIC receive credit.
- Add request and response trailers.
- Reject framing and routing fields such as Content-Length, Host, and TE
from outgoing trailers.
- Add 1xx informational responses.
- Add basic CONNECT tunnels with bidirectional DATA and half-close.
- Add generic Extended CONNECT negotiation and :protocol support.
- Add generic RFC 9297 Capsule framing, parsing, dispatch, and streams.
- Add RFC 9297 HTTP Datagrams over Net::QUIC 0.04, including
SETTINGS_H3_DATAGRAM, Quarter Stream ID routing, Transaction send/receive
APIs, bounded receive buffering, and H3_DATAGRAM_ERROR handling.
- Add persistent opaque HTTP/3 SETTINGS state for 0-RTT.
- Add explicit replay-aware 0-RTT requests and HTTP Datagrams.
- Validate accepted 0-RTT SETTINGS, including RFC 9204 QPACK rules.
- Roll rejected QUIC 0-RTT back to fresh HTTP/3 state for safe 1-RTT retry.
- Add generic HTTP/3 extension unidirectional streams.
- Add RFC 9218 request priority fields and live Transaction priority updates.
- Synchronize libnghttp3 client-stream ID validation with Net::QUIC stream limits.
- Add rejected CONNECT handling and CONNECT cleanup coverage.
- Add out-of-order multiplexing coverage.
- Add STOP_SENDING, RESET_STREAM, and stream-close handling.
- Release cancelled streaming buffers while preserving late ACK
accounting.
- Add bounded transmit and receive buffering.
- Add field-section and body resource limits.
- Honor peer SETTINGS_MAX_FIELD_SECTION_SIZE before sending header or
trailer sections.
- Add configurable QPACK limits.
- Validate HTTP/3 62-bit integer settings before native setup.
- Add generic extension SETTINGS advertisement, peer inspection, and validation.
- Respect HTTP/3-reserved and GREASE setting identifiers.
- Add HTTP/3 field validation and connection-specific field rules.
- Validate Host/:authority routing, http/https path form, and CONNECT
host/port semantics.
- Reject malformed received routing fields with H3_MESSAGE_ERROR on the
affected request stream without closing unrelated streams.
- Add bodyless response rules for HEAD, 204, 205, and 304.
- Validate outgoing Content-Length for buffered and streaming bodies.
- Add HTTP/3 graceful shutdown support.
- Map fatal libnghttp3 parser errors to QUIC application close errors.
- Remove completed stream, transaction, and native body state.
- Keep event loops, UDP sockets, TLS, and QUIC packet processing
outside Unblock::HTTP3.
- Test dependencies from CPAN rather than GitHub development code.
- Make TLS loopback tests self-contained with bundled localhost fixtures
instead of requiring the openssl command-line tool.
- Simplify README and public POD into the standard practical CPAN format.
- Add consistent SYNOPSIS, METHODS, SEE ALSO, AUTHOR, and LICENSE sections
across the public API documentation.
- Keep repository-only planning, release, contribution, security, and
public-network test material out of the CPAN distribution.
- Add public interoperability tests against Cloudflare and LiteSpeed HTTP/3
servers, with Google retained as a diagnostic target.
Keyboard Shortcuts
Global
s
Focus search bar
?
Bring up this help dialog
GitHub
gp
Go to pull requests
gi
Go to GitHub issues (only if GitHub is preferred repository)