Skip to content

Commit 8ebff29

Browse files
lib: http server multi same-named headers support
Let http server support response multiple same-named header as RFC2612 defined, this feature is also used in http/2.0 "server push" feature. Fix nodejs#3591
1 parent 0350505 commit 8ebff29

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

lib/_http_outgoing.js

+16-2
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,10 @@ OutgoingMessage.prototype.setHeader = function(name, value) {
350350
if (this._headers === null)
351351
this._headers = {};
352352

353-
var key = name.toLowerCase();
353+
var key = name.toLowerCase(), serial = 0, origKey = key;
354+
while (this._headers[key] !== undefined) {
355+
key = (origKey + serial++);
356+
}
354357
this._headers[key] = value;
355358
this._headerNames[key] = name;
356359

@@ -408,7 +411,18 @@ OutgoingMessage.prototype._renderHeaders = function() {
408411

409412
for (var i = 0, l = keys.length; i < l; i++) {
410413
var key = keys[i];
411-
headers[headerNames[key]] = headersMap[key];
414+
if (headers[headerNames[key]] !== undefined) {
415+
var isArray = Array.isArray(headers[headerNames[key]]);
416+
if (isArray) {
417+
headers[headerNames[key]].push(headersMap[key]);
418+
} else {
419+
var orig = headers[headerNames[key]];
420+
headers[headerNames[key]] = [];
421+
headers[headerNames[key]].push(orig);
422+
}
423+
} else {
424+
headers[headerNames[key]] = headersMap[key];
425+
}
412426
}
413427
return headers;
414428
};

0 commit comments

Comments
 (0)