v0.31.5
This commit is contained in:
1 parent
75104f87ba
commit
4cc994b3bc
86 files changed
+942
-223
No files matched your search
+29
-1
@@ -7,7 +7,7 @@ conformance, interoperability or production performance until the acceptance tes
|
||||
## Stack and configuration
|
||||
|
||||
The adapter delegates QUIC transport/TLS to Quinn 0.11.12 and HTTP/3/QPACK plus the
|
||||
Quinn adapter to `hpx-h3 2.5.19` with its `quinn` feature. The crate is imported as `h3`
|
||||
Quinn adapter to `hpx-h3 2.5.20` with its `quinn` feature. The crate is imported as `h3`
|
||||
in source. These are Cargo dependencies, not bundled binaries.
|
||||
Rustls provides TLS 1.3 for QUIC; SNI certificates come from the existing inventory.
|
||||
HTTP/1.1 and optional HTTP/2 remain on TCP at the same port. HTTP/3 is on UDP.
|
||||
@@ -113,6 +113,34 @@ is no separate external-port override. Open UDP as well as TCP in your firewall/
|
||||
balancer. Scope labels do not perform those operations. Clients lacking QUIC or blocked
|
||||
UDP can still connect using TCP; no guarantee is made about browser protocol preference.
|
||||
|
||||
## H3 full-page navigation to HTTP/1.1 backend (0.31.6)
|
||||
|
||||
The RustProxy logo remains a normal `href="/"` link, not a client-side panel change. On an H3-enabled frontend it produces a new document GET through the proxy. When forwarding an H3 GET/HEAD to an HTTP/1.1 backend, RustProxy now probes for the stream's end for at most 35 ms per initial frame. A finished empty request is passed to H1 with a confirmed complete receive half rather than an unknown body state. Hyper already special-cases H1 GET/HEAD framing; no claim is made that ordinary GET requests were chunked. A nonempty frame and all subsequent bytes are replayed without buffering the whole request. The slow-peer case falls back to regular streaming.
|
||||
|
||||
If `h3.accept()` fails, existing request tasks get the normal bounded drain instead of immediate mass abort. The new diagnostics use status=0 for cancellations (not a real HTTP response), and persist interrupted-response details including `phase=`, `stream_id=`, `method=`, `path=`, `response_status=`, `body_bytes_sent=` and `error=` in the bounded, redacted `error_detail`. These are stored per vhost when file logging is enabled; the normal access logs remain available for successful document and asset GETs.
|
||||
|
||||
**iOS validation procedure:** keep H3 on, click the logo repeatedly on an authenticated panel behind the real RustProxy vhost, and collect timestamps for `http3_peer_cancelled_before_headers`, `http3_peer_cancelled_after_headers`, `http3_response_write_error`, `http3_accept_error`, and the GET `/` and asset access records. Collect browser Web Inspector Network/QUIC trace if a blank document persists. Correlate the **new GET/** status and transmitted bytes with older cancelled streams. Mere cancellation of an obsolete API or SSE stream is not proof that the new document failed. This implementation is not proven to resolve an iOS issue until live tests pass.
|
||||
|
||||
## Browser refresh and stream cancellation (0.31.5)
|
||||
|
||||
A browser may cancel an obsolete H3 stream when the user reloads or leaves a
|
||||
page, sometimes before its HEADERS arrive. RFC 9114 `H3_REQUEST_CANCELLED`
|
||||
(and a peer-originated `H3_NO_ERROR` reset) is not itself a server-side HTTP 400.
|
||||
RustProxy therefore omits that fabricated 400 access-log entry and avoids
|
||||
adding `H3_INTERNAL_ERROR` to a directly identified cancelled response stream.
|
||||
Malformed or forbidden headers still yield a protocol-error 400.
|
||||
|
||||
This correction does **not** establish the cause of a blank document after F5.
|
||||
If the new navigation fails, compare its actual document/asset statuses over H3
|
||||
and H2, the configured reverse-proxy Host/Origin/forwarded-proto chain, and any
|
||||
connection-level QUIC errors. An error record without HTTP method, path and
|
||||
request headers cannot identify the browser document which failed. Capture
|
||||
browser network traces and QUIC qlogs with timestamps for live acceptance.
|
||||
|
||||
Per-vhost `http2_enabled`/`http3_enabled` toggles also no longer rotate the global
|
||||
HOT/COLD cache identity. Origin representation policy and cache invalidation are
|
||||
unchanged; the frontend protocol remains part of live request routing.
|
||||
|
||||
## Verification gate
|
||||
|
||||
```bash
|
||||
|
||||
Reference in new issue
Block a user