diff --git a/lib/internal/http2/core.js b/lib/internal/http2/core.js index c5bee6d405e495..0cddc2d48c5e58 100644 --- a/lib/internal/http2/core.js +++ b/lib/internal/http2/core.js @@ -395,7 +395,7 @@ function onSessionHeaders(handle, id, cat, flags, headers, sensitiveHeaders) { } else if (cat === NGHTTP2_HCAT_PUSH_RESPONSE) { event = 'push'; // cat === NGHTTP2_HCAT_HEADERS: - } else if (!endOfStream && status !== undefined && status >= 200) { + } else if (status >= 200) { event = 'response'; } else { event = endOfStream ? 'trailers' : 'headers'; diff --git a/test/parallel/test-http2-info-headers-and-end.js b/test/parallel/test-http2-info-headers-and-end.js new file mode 100644 index 00000000000000..9ae61f06428bea --- /dev/null +++ b/test/parallel/test-http2-info-headers-and-end.js @@ -0,0 +1,39 @@ +'use strict'; + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); +const http2 = require('http2'); +const assert = require('assert'); + +const server = http2.createServer((request, response) => { + response.writeContinue(); + response.end(); +}); + +server.listen(0, common.mustCall(() => { + const client = http2.connect(`http://localhost:${server.address().port}`); + + { + const req = client.request({ ':path': '/' }); + + req.on('headers', common.mustCall((headers) => { + assert.notStrictEqual(headers, undefined); + assert.strictEqual(headers[':status'], 100); + })); + + req.on('response', common.mustCall((headers) => { + assert.notStrictEqual(headers, undefined); + assert.strictEqual(headers[':status'], 200); + })); + + req.on('trailers', common.mustNotCall()); + + req.resume(); + req.on('end', () => { + client.close(); + server.close(); + }); + req.end(); + } +}));