feat: add trailers

This commit is contained in:
avwo
2020-08-26 21:29:16 +08:00
parent 12b3859cb5
commit 4b6d3bb9d0
3 changed files with 14 additions and 2 deletions
+4 -1
View File
@@ -219,6 +219,9 @@ function requestH2(client, req, res, callback) {
var newHeaders = {};
var statusCode = h2Headers[':status'];
var svrRes = h2Session;
svrRes.on('trailers', function(trailers) {
svrRes.trailers = trailers;
});
svrRes.statusCode = statusCode;
// HTTP2 对响应内容格式要求太严格(NGHTTP2_PROTOCOL_ERROR)
if (!util.hasBody(svrRes, req)) {
@@ -230,7 +233,7 @@ function requestH2(client, req, res, callback) {
svrRes.httpVersion = '1.1';
svrRes.headers = newHeaders;
Object.keys(h2Headers).forEach(function(name) {
if (name[0] !== ':') {
if (name[0] !== ':' && name !== 'content-length') {
newHeaders[name] = h2Headers[name];
}
});
+9
View File
@@ -781,6 +781,15 @@ function toHttp1(req, res) {
client.on('error', handleError);
client.on('response', function(svrRes) {
svrRes.on('error', handleError);
svrRes.once('end', function() {
var trailers = svrRes.trailers;
if (!util.isEmptyObject(trailers)) {
var rawHeaderNames = svrRes.rawTrailers ? getRawHeaderNames(svrRes.rawTrailers) : null;
try {
res.addTrailers(formatHeaders(trailers, rawHeaderNames));
} catch (e) {}
}
});
try {
var code = svrRes.statusCode;
res.writeHead(code, getStatusMessage(svrRes), formatRawHeaders(svrRes, isH2));