diff --git a/lib/_http_agent.js b/lib/_http_agent.js index 4917e22047..c6bc8298d0 100644 --- a/lib/_http_agent.js +++ b/lib/_http_agent.js @@ -160,11 +160,13 @@ Agent.prototype.createSocket = function(req, options) { options = util._extend({}, options); options = util._extend(options, self.options); - options.servername = options.host; - if (req) { - var hostHeader = req.getHeader('host'); - if (hostHeader) { - options.servername = hostHeader.replace(/:.*$/, ''); + if (!options.servername) { + options.servername = options.host; + if (req) { + var hostHeader = req.getHeader('host'); + if (hostHeader) { + options.servername = hostHeader.replace(/:.*$/, ''); + } } } diff --git a/test/parallel/test-https-agent-servername.js b/test/parallel/test-https-agent-servername.js new file mode 100644 index 0000000000..1647b0ee9a --- /dev/null +++ b/test/parallel/test-https-agent-servername.js @@ -0,0 +1,40 @@ +var common = require('../common'); +var assert = require('assert'); + +if (!common.hasCrypto) { + console.log('1..0 # Skipped: missing crypto'); + process.exit(); +} + +var https = require('https'); +var fs = require('fs'); + +var options = { + key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'), + cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem'), + ca: fs.readFileSync(common.fixturesDir + '/keys/ca1-cert.pem') +}; + + +var server = https.Server(options, function(req, res) { + res.writeHead(200); + res.end('hello world\n'); +}); + + +server.listen(common.PORT, function() { + https.get({ + path: '/', + port: common.PORT, + rejectUnauthorized: true, + servername: 'agent1', + ca: options.ca + }, function(res) { + res.resume(); + console.log(res.statusCode); + server.close(); + }).on('error', function(e) { + console.log(e.message); + process.exit(1); + }); +});