mirror of
https://github.com/nodejs/node.git
synced 2025-05-10 11:50:36 +00:00

Rather than using the `'fetchTrailers'` event to collect trailers, a new `getTrailers` callback option is supported. If not set, the internals will skip calling out for trailers at all. Expands the test to make sure trailers work from the client side also. PR-URL: https://github.com/nodejs/node/pull/14239 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
60 lines
1.2 KiB
JavaScript
60 lines
1.2 KiB
JavaScript
// Flags: --expose-http2
|
|
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const h2 = require('http2');
|
|
|
|
const server = h2.createServer();
|
|
|
|
// we use the lower-level API here
|
|
server.on('stream', common.mustCall(onStream));
|
|
|
|
function onStream(stream, headers, flags) {
|
|
|
|
[
|
|
':path',
|
|
':authority',
|
|
':method',
|
|
':scheme'
|
|
].forEach((i) => {
|
|
assert.throws(() => stream.respond({ [i]: '/' }),
|
|
common.expectsError({
|
|
code: 'ERR_HTTP2_INVALID_PSEUDOHEADER'
|
|
}));
|
|
});
|
|
|
|
stream.respond({
|
|
'content-type': 'text/html',
|
|
':status': 200
|
|
}, {
|
|
getTrailers: common.mustCall((trailers) => {
|
|
trailers[':status'] = 'bar';
|
|
})
|
|
});
|
|
|
|
stream.on('error', common.expectsError({
|
|
code: 'ERR_HTTP2_INVALID_PSEUDOHEADER'
|
|
}));
|
|
|
|
stream.end('hello world');
|
|
}
|
|
|
|
server.listen(0);
|
|
|
|
server.on('listening', common.mustCall(() => {
|
|
|
|
const client = h2.connect(`http://localhost:${server.address().port}`);
|
|
|
|
const req = client.request({ ':path': '/' });
|
|
|
|
req.on('response', common.mustCall());
|
|
req.resume();
|
|
req.on('end', common.mustCall(() => {
|
|
server.close();
|
|
client.destroy();
|
|
}));
|
|
req.end();
|
|
|
|
}));
|