deno
feat(ext/node): rewrite node:http with llhttp and native TCPWrap
#33208
Merged

feat(ext/node): rewrite node:http with llhttp and native TCPWrap #33208

bartlomieju merged 131 commits into main from feat/http-llhttp-client
bartlomieju
bartlomieju feat(ext/node): add llhttp 9.3.1 FFI bindings for HTTP/1.1 parsing
8ce7bb9d
bartlomieju wip(ext/node): HTTPParser cppgc binding skeleton
df4002a5
bartlomieju feat(ext/node): add HTTPParser cppgc binding over llhttp
4939cd63
bartlomieju feat(ext/node): wire HTTPParser JS binding to native llhttp cppgc
d6a95c2e
bartlomieju feat(ext/node): pass all 10 Node.js HTTP parser compat tests
b730dea8
bartlomieju fix: lint fixes - add allow reasons, exclude llhttp C from copyright …
2ee9439c
bartlomieju chore: format
296eab46
bartlomieju feat(ext/node): port Node.js _http_incoming.js
b9b4dad7
bartlomieju feat(ext/node): rewrite _http_common.ts to match Node.js structure
dbf524e2
bartlomieju feat(ext/node): port Node.js _http_client.js
a8d594e6
bartlomieju feat(ext/node): wire llhttp-based ClientRequest into http.ts
1989913b
bartlomieju feat(ext/node): port Node.js _http_server.js - real net.Server + llhttp
2ada4f9f
bartlomieju fix(ext/node): lint fixes, remove old server/client code from http.ts
d53a7483
bartlomieju refactor(ext/node): remove dead HTTP code, hyper ops, kStreamBaseFiel…
ac8e8cfb
bartlomieju refactor(ext/node): remove kStreamBaseField from all consumers
a70a98be
bartlomieju refactor(ext/node): simplify tcp_wrap.ts, remove kUseNativeWrap
4f67d1bd
bartlomieju refactor(ext/node): remove kStreamBaseField and legacy async I/O from…
18ed3631
bartlomieju bartlomieju changed the base branch from feat/llhttp-parser to main 171 days ago
bartlomieju
bartlomieju merge origin/main into feat/http-llhttp-client
1ba3c95e
bartlomieju fix: address CI failures - CONNECT event, OTel instrumentation, expec…
f6dc481b
bartlomieju fix: use cumulative temporality for node_http_metric OTel test
cafa9ade
bartlomieju fix: server.close() hangs due to idle keep-alive connections
100c1812
bartlomieju fix: writeHead(status, headers) ignores headers when no prior setHeader
1dc1d3c2
bartlomieju fix: free parser in responseKeepAlive for clean socket reuse
a3a40d2e
bartlomieju refactor: remove op_net_connect_tcp/TcpConn fallback from TCP.#connect
777f8f36
bartlomieju merge refactor/remove-kStreamBaseField into feat/http-llhttp-client
becdd341
bartlomieju merge origin/main into feat/http-llhttp-client
06acc9c3
bartlomieju fix: enable Connection header logic in _http_outgoing.ts
b6ccd583
bartlomieju chore: format _http_outgoing.ts
c23bf08e
bartlomieju fix: restore _http_common.ts with parser pool, freeParser, and callbacks
e659d7f6
bartlomieju fix: implement OutgoingMessage.end(), fix _send/_writeRaw, header ser…
9ed8cec5
bartlomieju refactor: remove kUseNativeWrap, fix TCP write callback timing, align…
f8340492
bartlomieju refactor: strip LibuvStreamWrap down to interface, remove dead async …
5ec1e0f3
bartlomieju refactor: remove kStreamBaseField dead code
daa6eb4b
bartlomieju feat: add TCPWrap inheriting from LibUvStreamWrap
fead6339
bartlomieju wip: switch JS TCP to use Rust TCPWrap directly
f75acf65
bartlomieju feat: wire up TCPWrap connect and listen with proper callbacks
98b74271
bartlomieju fix: preserve parser this-context in kOnBody wrapper, remove debug logs
c276fbdb
bartlomieju chore: fix formatting and lint issues
8c9f104b
bartlomieju fix: address clippy warnings in tcp_wrap.rs
e3613f4c
bartlomieju fix: update TLS wrap to use new TCPWrap, clean up dead _nativeHandle …
82e6b81b
bartlomieju fix: add createConnection to HTTPS Agent, clean up TLS/HTTP2 dead code
3f890226
bartlomieju fix: TLS handshake over TCPWrap
f5688048
bartlomieju fix: add missing req.end() in https_test
63b4c051
bartlomieju fix: handle array-of-arrays headers in writeHead/_storeHeader
82063a1c
bartlomieju chore: ignore HTTP/2 compat tests broken by TCPWrap migration
4027fdab
bartlomieju fix: rewrite https.Server to extend tls.Server, matching Node.js
4698f178
bartlomieju fix: TLS cert verification and SNI servername derivation
15539c13
bartlomieju fix: use correct ignore format in node_compat config.jsonc
37666e32
bartlomieju fix: align _http_common with Node.js, convert to .js
19fd4b44
bartlomieju fix: align _http_agent with Node.js, rename .mjs to .js
bbb45a3a
bartlomieju fix: align _http_client with Node.js
cae80a21
bartlomieju fix: align _http_server with Node.js
2587a385
bartlomieju fix: align _http_outgoing with Node.js
08f5356c
bartlomieju fix: sort METHODS array in http module to match Node.js
4e22e726
bartlomieju fix: add diagnostics_channel and async context to _http_client
9c086d1b
bartlomieju fix: remove parser cleanup from responseKeepAlive to match Node.js
22340683
bartlomieju fix: align _http_server with Node.js (remaining items)
e838a262
bartlomieju feat: implement parser.consume/unconsume for direct stream reading
fd33c0e1
bartlomieju feat: add ConnectionsList timeout tracking and parser.consume wiring
c6c90200
bartlomieju fix: align _http_outgoing with Node.js (remaining items)
9f32fba6
bartlomieju fix: add setMaxIdleHTTPParsers to http module
32f917f1
bartlomieju chore: format binding.rs
0cdd7341
bartlomieju fix: align https.Server with Node.js
182a793a
bartlomieju fix: add Symbol.asyncDispose to https.Server
5578dff3
bartlomieju fix: align https.Agent with Node.js
832b4eb8
bartlomieju fix: rewrite https.request() to match Node.js, fix critical agent mut…
649ec6c0
bartlomieju chore: fix lint errors from node:http alignment changes
e1087f6a
bartlomieju fix: remove duplicate export of setMaxIdleHTTPParsers
1fbf3230
bartlomieju fix: setHeader preserves array values, use system timer for connections
7668a336
bartlomieju fix: use system timer for utcDate cache to avoid test sanitizer leak
125a5930
bartlomieju fix: remove broken res.socket.end() from non-string buffer test
a84321a7
bartlomieju fix: HTTP globalAgent defaults to keepAlive:true matching Node.js v19+
7b020178
bartlomieju fix: add beforeEach to destroy idle keep-alive sockets in http_test
7999528d
bartlomieju fix: add beforeEach to destroy idle keep-alive sockets in http_test
2226ac68
bartlomieju fix: propagate JS exceptions from parser callbacks
58365f6c
bartlomieju fix: propagate JS exceptions from parser callbacks
7417a7cd
bartlomieju fix: propagate JS exceptions from parser callbacks
05d273d6
bartlomieju fix: remove test.only left from debugging
84d57678
bartlomieju fix: remove conflicting Content-Length from chunked body test
07f1a70d
bartlomieju fix: client end callback test timing and hardcoded port
63280f26
bartlomieju chore: format Rust files
a9919d10
bartlomieju fix: enable HTTP over unix socket test
428c243c
bartlomieju feat: set isStreamBase on TCP, Pipe, and TTY handles
acf7e314
bartlomieju fix: re-enable HTTP over pipe tests
4eea0f3f
bartlomieju fix: mark HTTP/2 session receive op as reentrant
0230ff6d
bartlomieju fix: HTTP/2 reentrant receive op and double write callback
84a79f77
bartlomieju wip: HTTP/2 JS write path and native consume_stream
447b09c7
bartlomieju fix: HTTP/2 JS write path for outgoing frames
22d02164
bartlomieju fix: socket close/error event ordering, h2 write path
5c0d150b
bartlomieju fix: socket event ordering, h2 write path, consume EOF handling
251a6e49
bartlomieju fix: add beforeEach to destroy idle keep-alive sockets in async_hooks…
6b2d9149
bartlomieju fix: timer leaks, test fixes, socket event ordering
ec4a1092
bartlomieju fix: use system timers for keep-alive, fix test assertions
ed1afa1d
bartlomieju fix: brotli test handles uncompressed responses, use OS-allocated port
196d4108
bartlomieju fix: system timer for _emitCloseIfDrained and TLS handshake
038dc884
bartlomieju fix: add setNetPermToken to TCPWrap for permission checks
0cafd2ad
bartlomieju fix: h2c upgrade test to match Node.js behavior
8faa3a29
bartlomieju chore: format and lint fixes
c8947291
bartlomieju fix: socket close/error ordering and socketCloseListener guard
0fb97e0d
bartlomieju fix: remove stack-trace-based socket pause workaround
ad7a23c3
bartlomieju fix: defer handle close callbacks to Phase 6, drain nextTick before c…
e2646fa1
bartlomieju fix: HTTP/2 session graceful close never completing
9b0ddf9f
bartlomieju chore: fix lint and clippy warnings
ad44a0c1
bartlomieju fix: transparent retry on stale keepalive sockets, reject non-writabl…
091f01cb
bartlomieju fix: flush GOAWAY frame to TCP socket in JS write path
e6d7c3f8
bartlomieju Merge remote-tracking branch 'origin/main' into feat/http-llhttp-client
64a206f2
bartlomieju lint
c16b1b01
bartlomieju bartlomieju changed the title feat(ext/node): rewrite node:http with llhttp - client, server, and OutgoingMessage feat(ext/node): rewrite node:http with llhttp and native TCPWrap 165 days ago
bartlomieju fix: remove obsolete [WILDCARD] from pipe_open_fd .out files
15a287b7
bartlomieju fix: three node compat test fixes (multiheaders, dns-error, net-connect)
59f69f75
bartlomieju fix: zero-length buffer panic and writev encoding for non-standard ch…
4671803b
bartlomieju fix: snapshot handle lists in run_io to prevent skipping during itera…
1a2bc616
bartlomieju fix: child_process disconnect error code and uv_shutdown waker
f05549ba
bartlomieju fix: OWS header trimming, bytesWritten getter, webstream adapter import
036b0ee3
bartlomieju fix: socket.bytesRead returns undefined from CppGC handle
dcda13d4
bartlomieju fix: set _consuming flag in parserOnBody to prevent request auto-dump
773af38d
bartlomieju chore: ignore 16 failing node compat tests with reasons
f66fb4ca
bartlomieju fix: paused socket ref, Writable.toWeb duck-type, OutgoingMessage opt…
695e97a4
bartlomieju fix: pass undefined for URL in kOnHeadersComplete after kOnHeaders flush
0f1ce295
bartlomieju fix: set UV_HANDLE_ACTIVE in uv_write so write queue is drained
4a23cee8
bartlomieju lint: fix clippy manual_ok_err and deno fmt
7e91037c
bartlomieju fix: handle EINVAL in upgraded socket close test on Windows
0f9cc667
bartlomieju fix: map ConnectionReset and other errors correctly on Windows
e6f311d0
bartlomieju chore: rustfmt
d0b691a4
miracatbot
miracatbot commented on 2026-04-15
miracatbot
bartlomieju Merge remote-tracking branch 'origin/main' into feat/http-llhttp-client
79a544ec
bartlomieju bartlomieju force pushed from 0e2d577c to a5df53f9 164 days ago
bartlomieju bartlomieju force pushed from a5df53f9 to bca153d5 164 days ago
bartlomieju fix: skip unix socket HTTP test on Windows
7f9a6480
bartlomieju bartlomieju force pushed from bca153d5 to 7f9a6480 164 days ago
bartlomieju fix node compat on linux
066215d9
bartlomieju fix: correct operator precedence in socketOnError condition
2b55563e
bartlomieju
bartlomieju commented on 2026-04-15
bartlomieju
bartlomieju commented on 2026-04-15
bartlomieju
bartlomieju commented on 2026-04-15
bartlomieju
bartlomieju commented on 2026-04-15
bartlomieju
bartlomieju commented on 2026-04-15
bartlomieju
bartlomieju commented on 2026-04-15
bartlomieju
bartlomieju commented on 2026-04-15
bartlomieju
bartlomieju commented on 2026-04-15
bartlomieju
bartlomieju commented on 2026-04-15
bartlomieju
bartlomieju commented on 2026-04-15
nathanwhit fix windows bugs
93d54963
nathanwhit two more windows shutdown issues
1908a9a5
bartlomieju fix: collapse nested if-let in pipe.rs and flush outgoing h2 frames i…
8a2ba902
bartlomieju
bartlomieju commented on 2026-04-16
bartlomieju
bartlomieju commented on 2026-04-16
bartlomieju
bartlomieju commented on 2026-04-16
bartlomieju fix: add system timer wrappers, use socket.setTimeout for keepAlive
b6fc7e3e
bartlomieju bartlomieju merged a2eb5ba6 into main 162 days ago
bartlomieju bartlomieju deleted the feat/http-llhttp-client branch 162 days ago

Login to write a write a comment.

Login via GitHub

Assignees
No one assigned
Labels
Milestone