From 22e922bccb570944741e5022c7db7ca48c7a8d37 Mon Sep 17 00:00:00 2001 From: cainrus Date: Wed, 11 Jul 2018 19:55:57 +0300 Subject: [PATCH] Support HTTP/2 --- middleware.js | 16 ++++++++++++---- test/middleware-test.js | 10 ++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/middleware.js b/middleware.js index 644ea53..b220aad 100644 --- a/middleware.js +++ b/middleware.js @@ -57,16 +57,24 @@ function createEventStream(heartbeat) { }, heartbeat).unref(); return { handler: function(req, res) { - req.socket.setKeepAlive(true); - res.writeHead(200, { + var headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'text/event-stream;charset=utf-8', 'Cache-Control': 'no-cache, no-transform', - 'Connection': 'keep-alive', // While behind nginx, event stream should not be buffered: // http://nginx.org/docs/http/ngx_http_proxy_module.html#proxy_buffering 'X-Accel-Buffering': 'no' - }); + }; + + var isHttp1 = !(parseInt(req.httpVersion) >= 2); + if (isHttp1) { + req.socket.setKeepAlive(true); + Object.assign(headers, { + 'Connection': 'keep-alive', + }); + } + + res.writeHead(200, headers); res.write('\n'); var id = clientId++; clients[id] = res; diff --git a/test/middleware-test.js b/test/middleware-test.js index 03e8602..6142ee5 100644 --- a/test/middleware-test.js +++ b/test/middleware-test.js @@ -183,6 +183,16 @@ describe("middleware", function() { } }); }); + // Express HTTP/2 support is in progress: https://github.com/expressjs/express/pull/3390 + it("should not contain `conntection: keep-alive` header for HTTP/2 request"); + it("should contain `conntection: keep-alive` header for HTTP/1 request", function(done) { + request('/__webpack_hmr') + .end(function(err, res) { + if (err) return done(err); + assert.equal(res.headers['connection'], 'keep-alive'); + done(); + }); + }); }); beforeEach(function() {