HttpProxy and Http2Client (719 LOC) shipped a reverse-proxy adapter and outbound HTTP/2 client from flash core with zero callers anywhere in the server itself — only each other and their own tests. An HTTP/1.1+2 server framework has no business bundling an outbound client; that capability belongs in its own flash-extensions/flash-ext-* module if/when it's needed. Removed, along with the now-dead src/bench load driver that depended on Http2Client (no replacement client written here — flagged as follow-up work, not silently dropped). docs/http2/ had accumulated core, cross-protocol documentation alongside genuine HTTP/2-protocol internals: HTTP1-HARDENING, TRANSPORT, MESSAGE-MODEL, TRAILERS-AND-STREAMING and BYTES all describe machinery HTTP/1.1 and HTTP/2 share, not HTTP/2 specifically. Moved to a new docs/core/, leaving docs/http2/ to the protocol layers, wire internals and operational docs that are actually HTTP/2-specific. CLEARTEXT-AND-PROXY.md renamed to CLEARTEXT.md and its now-removed upstream-client section cut, matching the source removal above. README.md: removed the "HTTP/2 upstream proxy" section (documented the deleted HttpProxy/Http2Client), the flash-bench module row and build command (not a module that exists in this repo), and fixed every doc link to the new docs/core/ paths. Added the new FlashConfiguration.maxConnections field to the configuration reference. src/bench/ (a load-test harness distinct from the JMH suite, not wired into any Maven profile or CI) is committed here for the first time.
44 lines
2.0 KiB
Markdown
44 lines
2.0 KiB
Markdown
# HTTP/2 in Flash
|
|
|
|
Flash treats HTTP/1.1 and HTTP/2 as peer transports behind one connection boundary. TLS ALPN or
|
|
the cleartext prior-knowledge preface selects a protocol once; both paths then feed the same
|
|
router, `Request`, `Response`, handler, trailer, streaming and WebSocket APIs. HTTP/2 adds a
|
|
bounded frame decoder, HPACK codec, stream state machine, two-level flow control and one serialized
|
|
writer per connection. Application code does not branch on the wire protocol.
|
|
|
|
The implementation is deliberately layered:
|
|
|
|
```text
|
|
listener / TLS
|
|
-> protocol negotiation
|
|
-> HTTP/1.1 parser ---------+
|
|
-> HTTP/2 frames + HPACK ----+-> shared request model -> router -> handler
|
|
shared response model
|
|
<- HTTP/1.1 serializer -----+
|
|
<- HTTP/2 stream writer ----+
|
|
```
|
|
|
|
This page covers the HTTP/2-specific layers only. The transport, message model, and byte
|
|
primitives shared with HTTP/1.1 live in [`../core/`](../core/README.md).
|
|
|
|
## Protocol layers
|
|
|
|
- [Connection](CONNECTION.md) and [streams](STREAMS.md) — HTTP/2 connection and stream state.
|
|
- [Flow control](FLOW-CONTROL.md) — request backpressure and streamed responses.
|
|
- [Cleartext](CLEARTEXT.md) — prior knowledge and the 421 misdirected-request rule.
|
|
- [WebSockets](WEBSOCKET.md) — RFC 8441 extended CONNECT using the existing WebSocket API.
|
|
|
|
## Wire internals
|
|
|
|
- [Serialized writer](WRITER.md) — the single-owner output path and contention model.
|
|
- [Frames](FRAMES.md) — frame parsing, validation and error scope.
|
|
- [HPACK](HPACK.md) — integer/Huffman coding and static/dynamic table ownership.
|
|
|
|
## Operate and verify
|
|
|
|
- [Security](SECURITY.md) — every HTTP/2 limit, default and abuse control.
|
|
- [Troubleshooting](TROUBLESHOOTING.md) — GOAWAY/RST_STREAM diagnosis and protocol tracing.
|
|
- [Compliance](COMPLIANCE.md) — h2spec, interoperability, fuzzing and deliberate omissions.
|
|
- [Performance](PERFORMANCE.md) and [CI baselines](BASELINES.md) — measurements and regression
|
|
gates, including the comparison with nghttpd.
|