diff --git a/lib/_http_client.js b/lib/_http_client.js index 9cdff5583dadef..50912949b58a65 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -105,13 +105,20 @@ function ClientRequest(options, cb) { self.timeout = options.timeout; var method = options.method; - if (method != null && typeof method !== 'string') { + var methodIsString = (typeof method === 'string'); + if (method != null && !methodIsString) { throw new TypeError('Method must be a string'); } - method = self.method = (method || 'GET').toUpperCase(); - if (!common._checkIsHttpToken(method)) { - throw new TypeError('Method must be a valid HTTP token'); + + 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); diff --git a/lib/_http_common.js b/lib/_http_common.js index f585d97d7b6536..b8724f00ec6557 100644 --- a/lib/_http_common.js +++ b/lib/_http_common.js @@ -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) diff --git a/lib/_http_outgoing.js b/lib/_http_outgoing.js index 8520328683ea47..30011e091525a3 100644 --- a/lib/_http_outgoing.js +++ b/lib/_http_outgoing.js @@ -314,21 +314,21 @@ function _storeHeader(firstLine, headers) { if (state.expect) this._send(''); } -function storeHeader(self, state, field, value, validate) { +function storeHeader(self, state, key, value, validate) { if (validate) { - if (!checkIsHttpToken(field)) { + 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 (value === undefined) { - throw new Error('Header "%s" value must not be undefined', field); + throw new Error('Header "%s" value must not be undefined', key); } else 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.header += field + ': ' + escapeHeaderValue(value) + CRLF; - matchHeader(self, state, field, value); + state.header += key + ': ' + escapeHeaderValue(value) + CRLF; + matchHeader(self, state, key, value); } function matchConnValue(self, state, value) { @@ -374,7 +374,7 @@ function matchHeader(self, state, field, value) { } function validateHeader(msg, 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) @@ -568,7 +568,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 + '"]'); }