Skip to content

Commit

Permalink
http: optimize default method case
Browse files Browse the repository at this point in the history
PR-URL: #10654
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
  • Loading branch information
mscdex committed Jan 19, 2017
1 parent c9bff04 commit e7859c2
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 19 deletions.
17 changes: 14 additions & 3 deletions lib/_http_client.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,21 @@ function ClientRequest(options, cb) {
self.socketPath = options.socketPath;
self.timeout = options.timeout;

var method = self.method = (options.method || 'GET').toUpperCase();
if (!common._checkIsHttpToken(method)) {
throw new TypeError('Method must be a valid HTTP token');
var method = options.method;
var methodIsString = (typeof method === 'string');
if (method != null && !methodIsString) {
throw new TypeError('Method must be a string');
}

if (methodIsString && method) {
if (!common._checkIsHttpToken(method)) {
throw new TypeError('Method must be a valid HTTP token');
}
method = self.method = method.toUpperCase();
} else {
method = self.method = 'GET';
}

self.path = options.path || '/';
if (cb) {
self.once('response', cb);
Expand Down
2 changes: 0 additions & 2 deletions lib/_http_common.js
Original file line number Diff line number Diff line change
Expand Up @@ -265,8 +265,6 @@ var validTokens = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // ... 255
];
function checkIsHttpToken(val) {
if (typeof val !== 'string' || val.length === 0)
return false;
if (!validTokens[val.charCodeAt(0)])
return false;
if (val.length < 2)
Expand Down
28 changes: 14 additions & 14 deletions lib/_http_outgoing.js
Original file line number Diff line number Diff line change
Expand Up @@ -319,18 +319,18 @@ function _storeHeader(firstLine, headers) {
if (state.sentExpect) this._send('');
}

function storeHeader(self, state, field, value) {
if (!checkIsHttpToken(field)) {
function storeHeader(self, state, key, value) {
if (typeof key !== 'string' || !key || !checkIsHttpToken(key)) {
throw new TypeError(
'Header name must be a valid HTTP Token ["' + field + '"]');
'Header name must be a valid HTTP Token ["' + key + '"]');
}
if (checkInvalidHeaderChar(value)) {
debug('Header "%s" contains invalid characters', field);
debug('Header "%s" contains invalid characters', key);
throw new TypeError('The header content contains invalid characters');
}
state.messageHeader += field + ': ' + escapeHeaderValue(value) + CRLF;
state.messageHeader += key + ': ' + escapeHeaderValue(value) + CRLF;

if (connectionExpression.test(field)) {
if (connectionExpression.test(key)) {
state.sentConnectionHeader = true;
if (connCloseExpression.test(value)) {
self._last = true;
Expand All @@ -339,26 +339,26 @@ function storeHeader(self, state, field, value) {
}
if (connUpgradeExpression.test(value))
state.sentConnectionUpgrade = true;
} else if (transferEncodingExpression.test(field)) {
} else if (transferEncodingExpression.test(key)) {
state.sentTransferEncodingHeader = true;
if (trfrEncChunkExpression.test(value)) self.chunkedEncoding = true;

} else if (contentLengthExpression.test(field)) {
} else if (contentLengthExpression.test(key)) {
state.sentContentLengthHeader = true;
} else if (dateExpression.test(field)) {
} else if (dateExpression.test(key)) {
state.sentDateHeader = true;
} else if (expectExpression.test(field)) {
} else if (expectExpression.test(key)) {
state.sentExpect = true;
} else if (trailerExpression.test(field)) {
} else if (trailerExpression.test(key)) {
state.sentTrailer = true;
} else if (upgradeExpression.test(field)) {
} else if (upgradeExpression.test(key)) {
state.sentUpgrade = true;
}
}


OutgoingMessage.prototype.setHeader = function setHeader(name, value) {
if (!checkIsHttpToken(name))
if (typeof name !== 'string' || !name || !checkIsHttpToken(name))
throw new TypeError(
'Header name must be a valid HTTP Token ["' + name + '"]');
if (value === undefined)
Expand Down Expand Up @@ -538,7 +538,7 @@ OutgoingMessage.prototype.addTrailers = function addTrailers(headers) {
field = key;
value = headers[key];
}
if (!checkIsHttpToken(field)) {
if (typeof field !== 'string' || !field || !checkIsHttpToken(field)) {
throw new TypeError(
'Trailer name must be a valid HTTP Token ["' + field + '"]');
}
Expand Down

0 comments on commit e7859c2

Please sign in to comment.