Skip to content

Commit

Permalink
lib: http server multi same-named headers support
Browse files Browse the repository at this point in the history
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
  • Loading branch information
PeterDaveHello committed May 18, 2016
1 parent 0350505 commit 8ebff29
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions lib/_http_outgoing.js
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,10 @@ OutgoingMessage.prototype.setHeader = function(name, value) {
if (this._headers === null)
this._headers = {};

var key = name.toLowerCase();
var key = name.toLowerCase(), serial = 0, origKey = key;
while (this._headers[key] !== undefined) {
key = (origKey + serial++);
}
this._headers[key] = value;
this._headerNames[key] = name;

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

for (var i = 0, l = keys.length; i < l; i++) {
var key = keys[i];
headers[headerNames[key]] = headersMap[key];
if (headers[headerNames[key]] !== undefined) {
var isArray = Array.isArray(headers[headerNames[key]]);
if (isArray) {
headers[headerNames[key]].push(headersMap[key]);
} else {
var orig = headers[headerNames[key]];
headers[headerNames[key]] = [];
headers[headerNames[key]].push(orig);
}
} else {
headers[headerNames[key]] = headersMap[key];
}
}
return headers;
};
Expand Down

0 comments on commit 8ebff29

Please sign in to comment.