-
-
Notifications
You must be signed in to change notification settings - Fork 693
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Bug Description
When using undici's Agent with useH2c: true and connections > 1, it results in a HTTPParserError: Response does not match the HTTP/1.1 protocol error.
Reproducible By
Successful Case (connections=1)
const agent = new Agent({
useH2c: true,
connections: 1,// ✅ Works correctly
});
await request("http://localhost:3002", {
dispatcher: agent,
path: "/test",
});Failure Case (connections>1)
const agent = new Agent({
useH2c: true,
connections: 2,// ❌ Fails
});
await Promise.all([
request("http://localhost:3002", { dispatcher: agent, path: "/test1" }),
request("http://localhost:3002", { dispatcher: agent, path: "/test2" }),
request("http://localhost:3002", { dispatcher: agent, path: "/test3" }),
]);Expected Behavior
When useH2c: true is set, the Agent should properly handle HTTP/2 cleartext connections regardless of the connections parameter value, maintaining multiple HTTP/2 connections if specified.
Logs & Screenshots
Error Message
HTTPParserError: Response does not match the HTTP/1.1 protocol (Expected HTTP/, RTSP/ or ICE/)
at Parser.execute (/path/to/undici/lib/dispatcher/client-h1.js:361:17)
at Parser.readMore (/path/to/undici/lib/dispatcher/client-h1.js:301:12)
at Socket.onHttpSocketReadable (/path/to/undici/lib/dispatcher/client-h1.js:879:18)
Error data fragment: 0000000400000000000000080700000000000000 (HTTP/2 SETTINGS frame)
TCP Connection Monitoring
connections=1:
[TCP connection #1] Establishing connection
[TCP connection #1] ✅ Connection established
[TCP connection #1] 📥 Receiving HTTP/2 data
✅ Test passed
connections=2:
[TCP connection #2] Establishing connection
[TCP connection #3] Establishing connection
[TCP connection #2] ✅ Connection established
[TCP connection #3] ✅ Connection established
[TCP connection #2] 📥 Receiving data [HTTP/2 binary frame]: 0000000400000000...
[TCP connection #3] 📥 Receiving data [HTTP/2 binary frame]: 0000000400000000...
[TCP connection #3] 🔴 Connection closed
[TCP connection #4] Establishing connection ← Attempting reconnect with HTTP/1.1 parser
❌ HTTPParserError
Environment
- Node.js version: v23.6.1
- undici version: 7.18.2
- Test scenario: HTTP/2 Cleartext (h2c) connection
Additional context
Root cause analysis:
- When
connections > 1, Agent creates Pool instead of Client - Pool's constructor doesn't explicitly handle
useH2coption - Pool doesn't pass
useH2cto created Client instances - Subsequent connections use HTTP/1.1 parser but receive HTTP/2 frames
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working