mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
Merge pull request #708 from minrk/close-closes
close websocket if proxyReq is closed before upgrade
This commit is contained in:
commit
b065d92908
@ -89,6 +89,10 @@ var passes = exports;
|
||||
);
|
||||
// Error Handler
|
||||
proxyReq.on('error', onOutgoingError);
|
||||
proxyReq.on('response', function (res) {
|
||||
// if upgrade event isn't going to happen, close the socket
|
||||
if (!res.upgrade) socket.end();
|
||||
});
|
||||
|
||||
proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) {
|
||||
proxySocket.on('error', onOutgoingError);
|
||||
|
||||
@ -281,6 +281,11 @@ describe('lib/http-proxy.js', function() {
|
||||
client.send('hello there');
|
||||
});
|
||||
|
||||
client.on('error', function (err) {
|
||||
expect(err).to.be.an(Error);
|
||||
expect(err.code).to.be('ECONNRESET');
|
||||
});
|
||||
|
||||
proxy.on('error', function (err) {
|
||||
expect(err).to.be.an(Error);
|
||||
expect(err.code).to.be('ECONNREFUSED');
|
||||
@ -289,6 +294,41 @@ describe('lib/http-proxy.js', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it('should close client socket if upstream is closed before upgrade', function (done) {
|
||||
var ports = { source: gen.port, proxy: gen.port };
|
||||
var server = http.createServer();
|
||||
server.on('upgrade', function (req, socket, head) {
|
||||
var response = [
|
||||
'HTTP/1.1 404 Not Found',
|
||||
'Content-type: text/html',
|
||||
'',
|
||||
''
|
||||
];
|
||||
socket.write(response.join('\r\n'));
|
||||
socket.end();
|
||||
});
|
||||
server.listen(ports.source);
|
||||
|
||||
var proxy = httpProxy.createProxyServer({
|
||||
// note: we don't ever listen on this port
|
||||
target: 'ws://127.0.0.1:' + ports.source,
|
||||
ws: true
|
||||
}),
|
||||
proxyServer = proxy.listen(ports.proxy),
|
||||
client = new ws('ws://127.0.0.1:' + ports.proxy);
|
||||
|
||||
client.on('open', function () {
|
||||
client.send('hello there');
|
||||
});
|
||||
|
||||
client.on('error', function (err) {
|
||||
expect(err).to.be.an(Error);
|
||||
expect(err.code).to.be('ECONNRESET');
|
||||
proxyServer.close();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should proxy a socket.io stream', function (done) {
|
||||
var ports = { source: gen.port, proxy: gen.port };
|
||||
var proxy = httpProxy.createProxyServer({
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user