_http_outgoing.tsline 996:toLowerCasee()typo -- CRITICAL. BreaksuniqueHeadersfeature entirely._http_outgoing.ts:write()does not setkNeedDrain-- HIGH. Backpressure/drain events broken._http_outgoing.ts:addTrailers()not implemented -- HIGH. Throws on use._http_outgoing.ts: Cookie header joining missing -- HIGH. Multiple cookie values sent as separate headers._http_outgoing.ts:_removedConnectionforces close -- HIGH. Connection always closed when default headers removed._http_server.js: MissingrequestTimeout/headersTimeout-- HIGH. No slow-loris protection._http_server.js: MissingclientErrorevent and error responses -- HIGH. No graceful handling of malformed requests._http_server.js:writeHead()missing_hasBody = falsefor 204/304 -- HIGH. Bodies on 204/304 responses allowed._http_agent.mjs:defaultPort/protocolignore options -- HIGH. HTTPS agent subclassing broken._http_agent.mjs:maxSocketseffectively ignored -- HIGH. No connection pooling limits._http_agent.mjs:keepSocketAlive()ignores server Keep-Alive hints -- HIGH. ECONNRESET risk._http_agent.mjs:ObjectValuesnot defined -- HIGH.keyloglistener throws ReferenceError.
- Node: Reads
--insecure-http-parserCLI flag viagetOptionValue(), emits a one-time warning. - Deno: Always returns
false. - Bug risk: Medium.
- Node: Optimized lookup table for short strings (< 10 chars); regex fallback.
- Deno: Always uses regex.
- Bug risk: Low (perf only).
- Node: Uses
setImmediate(closeParserInstance, parser). - Deno: Uses
setTimeout(closeParserInstance, 0, parser). - Bug risk: Low.
- Node:
this.defaultPort = this.options.defaultPort || 80andthis.protocol = this.options.protocol || 'http:'-- reads from options. - Deno: Hardcoded
this.defaultPort = 80andthis.protocol = "http:". - Bug risk: HIGH. HTTPS agent subclassing broken.
- Node: Sets
this.options.noDelay = trueif undefined. - Deno: Missing.
- Bug risk: Medium. Nagle's algorithm not disabled by default.
- Node: Configurable (default 1000ms).
- Deno: Missing.
- Bug risk: Medium.
- Node: Checks
sockLen < this.maxSockets. - Deno: Checks
this.maxSockets != 0(effectively ignores maxSockets). - Bug risk: HIGH.
- Node: Parses
Keep-Alive: timeout=Nheader, adjusts timeout, may return false. - Deno: Simply calls
socket.setKeepAlive(true, ...), always returns true. - Bug risk: HIGH. ECONNRESET risk.
- Node: Copies
req.timeout,this.keepAlive,this.keepAliveMsecsinto socket options. - Deno: Does not propagate.
- Bug risk: Medium.
- Deno:
maybeEnableKeylogreferencesObjectValueswhich is never imported. - Bug risk: HIGH. Throws ReferenceError when
keyloglistener added.
- Node: Publishes to 4 diagnostics channels.
- Deno: None.
- Bug risk: Medium.
- Node: Creates async resource for context tracking.
- Deno: Passes
{}. - Bug risk: Medium.
- Node: Triggers perf observers, diagnostics, trace events.
- Deno: No override. Has OTel in
_implicitHeaderinstead. - Bug risk: Low.
- Deno: Adds
parser.finish()andfreeParser()beforeemitFreeNT. - Node: Does NOT free parser in
responseKeepAlive. - Bug risk: Potential behavioral divergence. Needs investigation.
- Node: Uses
defaultTriggerAsyncIdScope(asyncId, process.nextTick, ...). - Deno: Uses
nextTick(emitFreeNT, req)without async context. - Bug risk: Medium.
- Node: Processes
requestTimeout(default 300000ms),headersTimeout(default 60000ms),keepAliveTimeoutBuffer,connectionsCheckingInterval,optimizeEmptyRequests,joinDuplicateHeaders,shouldUpgradeCallback. - Deno: Most missing or hardcoded differently. No
requestTimeout, noheadersTimeout. - Bug risk: HIGH. No slow-loris protection.
- Node: Uses
ConnectionsList+setIntervalchecker for enforcing timeouts. - Deno: Simple
Setfor connections, no timeout checking. - Bug risk: HIGH.
- Node: Emits
clientErroron server, sends HTTP error responses (400, 408, 431, 413). - Deno: Just destroys the socket. No
clientErrorevent. - Bug risk: HIGH.
- Node: Calls
socketOnError.call(socket, ret)which emitsclientError. - Deno: Calls
socket.destroy(ret)directly. - Bug risk: HIGH.
- Node: Enforces no-body for 204, 304, 1xx.
- Deno: Missing.
- Bug risk: HIGH.
- Bug risk: Medium.
- Node: Checks
parser.incoming === req, waits forreadableEnded, resets parser.incoming. - Deno: Simplified. Possible memory leaks.
- Bug risk: Medium.
- Node: Emits
drainon the HTTP message. - Deno: Does not.
- Bug risk: Medium. Backpressure signaling incomplete.
- Node: Uses
parser.consume(socket._handle)to bypass readable stream. - Deno: Uses normal
socket.on('data'). - Bug risk: Medium (perf).
- Deno:
headers[i].toLowerCasee()(extra 'e'). - Node:
headers[i].toLowerCase(). - Bug risk: CRITICAL. Throws TypeError whenever uniqueHeaders is used.
- Bug risk: Medium.
- Bug risk: Medium.
- Bug risk: Medium.
- Node: Sets
this[kNeedDrain] = trueon false return fromwrite_(). - Deno: Does not set.
- Bug risk: HIGH. Drain events broken.
- Bug risk: Medium.
- Bug risk: Low-medium.
- Bug risk: HIGH.
- Node: Joins multiple Cookie values with
'; '. - Deno: Sends as separate header lines.
- Bug risk: HIGH. RFC 6265 violation.
- Node:
this._last = !this.shouldKeepAlive. - Deno:
this._last = true; this.shouldKeepAlive = false. - Bug risk: HIGH.
- Bug risk: Medium.
Nearly identical. No significant functional differences.
- Bug risk: Low.
- Bug risk: Low.
- Bug risk: Low.