http2: fix several serious bugs

Currently http2 does not properly submit GOAWAY frames when a session
is being destroyed. It also doesn't properly handle when the other
party severs the connection after sending a GOAWAY frame, even though
it should.

Edge, IE & Safari are currently unable to handle empty TRAILERS
frames despite them being correctly to spec. Instead send an empty
DATA frame with END_STREAM flag in those situations.

Fix and adjust several flaky and/or incorrect tests.

PR-URL: https://github.com/nodejs/node/pull/20772
Fixes: https://github.com/nodejs/node/issues/20705
Fixes: https://github.com/nodejs/node/issues/20750
Fixes: https://github.com/nodejs/node/issues/20850
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Anatoli Papirovski 2018-05-17 23:03:15 +04:00
parent 4f0ab76b6c
commit b11e19e8ee
No known key found for this signature in database
GPG key ID: 614E2E1ABEB4B2C0
15 changed files with 145 additions and 122 deletions

View file

@ -55,13 +55,7 @@ server.listen(
0,
common.mustCall(() => {
const client = http2.connect(`http://localhost:${server.address().port}`);
// On certain operating systems, an ECONNRESET may occur. We do not need
// to test for it here. Do not make this a mustCall
client.on('error', () => {});
const req = client.request();
// On certain operating systems, an ECONNRESET may occur. We do not need
// to test for it here. Do not make this a mustCall
req.on('error', () => {});
req.resume();
req.on('close', common.mustCall(() => {
client.close();