diff --git a/lib/_http_client.js b/lib/_http_client.js index 9e2ebca8ee5ca3..b15bba4252886a 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -49,7 +49,7 @@ const Agent = require('_http_agent'); const { Buffer } = require('buffer'); const { defaultTriggerAsyncIdScope } = require('internal/async_hooks'); const { URL, urlToOptions, searchParamsSymbol } = require('internal/url'); -const { kOutHeaders, kNeedDrain } = require('internal/http'); +const { kOutHeaders, kNeedDrain, kClosed } = require('internal/http'); const { connResetException, codes } = require('internal/errors'); const { ERR_HTTP_HEADERS_SENT, @@ -197,6 +197,8 @@ function ClientRequest(input, options, cb) { } this.insecureHTTPParser = insecureHTTPParser; + options.path = method === 'CONNECT' && options.path.charAt(0) === '/' ? + options.path.slice(1) : options.path; this.path = options.path || '/'; if (cb) { this.once('response', cb); @@ -387,7 +389,7 @@ function _destroy(req, socket, err) { if (err) { req.emit('error', err); } - req._closed = true; + req[kClosed] = true; req.emit('close'); } } @@ -430,7 +432,7 @@ function socketCloseListener() { res.emit('error', connResetException('aborted')); } } - req._closed = true; + req[kClosed] = true; req.emit('close'); if (!res.aborted && res.readable) { res.on('end', function() { @@ -450,7 +452,7 @@ function socketCloseListener() { req.socket._hadError = true; req.emit('error', connResetException('socket hang up')); } - req._closed = true; + req[kClosed] = true; req.emit('close'); } @@ -555,7 +557,7 @@ function socketOnData(d) { req.emit(eventName, res, socket, bodyHead); req.destroyed = true; - req._closed = true; + req[kClosed] = true; req.emit('close'); } else { // Requested Upgrade or used CONNECT method, but have no handler. @@ -727,7 +729,7 @@ function requestOnPrefinish() { } function emitFreeNT(req) { - req._closed = true; + req[kClosed] = true; req.emit('close'); if (req.res) { req.res.emit('close');