Merge pull request #691 from minrk/firefox-ws-connection-close

handle 'upgrade' in comma-separated connection header
This commit is contained in:
Jarrett Cruger 2014-09-16 15:42:41 -04:00
commit 42c35aedca
2 changed files with 44 additions and 1 deletions

View File

@ -53,7 +53,7 @@ common.setupOutgoing = function(outgoing, options, req, forward) {
if (!outgoing.agent) {
outgoing.headers = outgoing.headers || {};
if (typeof outgoing.headers.connection !== 'string'
|| outgoing.headers.connection.toLowerCase() !== 'upgrade'
|| ! /(^|,)\s*upgrade\s*($|,)/i.test(outgoing.headers.connection)
) { outgoing.headers.connection = 'close'; }
}

View File

@ -59,6 +59,49 @@ describe('lib/http-proxy/common.js', function () {
expect(outgoing.headers.connection).to.eql('upgrade');
});
it('should not override agentless connection: contains upgrade', function () {
var outgoing = {};
common.setupOutgoing(outgoing,
{
agent: undefined,
target: {
host : 'hey',
hostname : 'how',
socketPath: 'are',
port : 'you',
},
headers: {'connection': 'keep-alive, upgrade'}, // this is what Firefox sets
},
{
method : 'i',
url : 'am',
headers : {'pro':'xy','overwritten':false}
});
expect(outgoing.headers.connection).to.eql('keep-alive, upgrade');
});
it('should override agentless connection: contains improper upgrade', function () {
// sanity check on upgrade regex
var outgoing = {};
common.setupOutgoing(outgoing,
{
agent: undefined,
target: {
host : 'hey',
hostname : 'how',
socketPath: 'are',
port : 'you',
},
headers: {'connection': 'keep-alive, not upgrade'},
},
{
method : 'i',
url : 'am',
headers : {'pro':'xy','overwritten':false}
});
expect(outgoing.headers.connection).to.eql('close');
});
it('should override agentless non-upgrade header to close', function () {
var outgoing = {};
common.setupOutgoing(outgoing,