Skip to content

Commit e791604

Browse files
committed
Replace header key only
1 parent ac1a01b commit e791604

File tree

2 files changed

+25
-18
lines changed

2 files changed

+25
-18
lines changed

lib/http-proxy/passes/web-outgoing.js

+12-18
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,13 @@ module.exports = { // <--
8484
*/
8585
writeHeaders: function writeHeaders(req, res, proxyRes, options) {
8686
var rewriteCookieDomainConfig = options.cookieDomainRewrite,
87-
// In proxyRes.rawHeaders Set-Cookie headers are sparse.
88-
// so, we'll collect Set-Cookie headers, and set them in the response as an array.
89-
setCookies = [],
87+
rawHeaderKeyMap = {},
9088
setHeader = function(key, header) {
9189
if (header == undefined) return;
92-
if (key.toLowerCase() !== 'set-cookie') {
93-
return res.setHeader(String(key).trim(), header);
94-
}
95-
if (rewriteCookieDomainConfig) {
90+
if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') {
9691
header = common.rewriteCookieDomain(header, rewriteCookieDomainConfig);
9792
}
98-
setCookies.push(header); // defer to the end when we have all of them
93+
res.setHeader(String(key).trim(), header);
9994
};
10095

10196
if (typeof rewriteCookieDomainConfig === 'string') { //also test for ''
@@ -107,18 +102,17 @@ module.exports = { // <--
107102
if (proxyRes.rawHeaders != undefined) {
108103
for (var i = 0; i < proxyRes.rawHeaders.length; i += 2) {
109104
var key = proxyRes.rawHeaders[i];
110-
var header = proxyRes.rawHeaders[i + 1];
111-
setHeader(key, header);
105+
rawHeaderKeyMap[key.toLowerCase()] = key;
112106
}
113-
} else {
114-
Object.keys(proxyRes.headers).forEach(function(key) {
115-
var header = proxyRes.headers[key];
116-
setHeader(key, header);
117-
});
118-
}
119-
if (setCookies.length) {
120-
res.setHeader('Set-Cookie', setCookies.length === 1 ? setCookies[0] : setCookies);
121107
}
108+
109+
Object.keys(proxyRes.headers).forEach(function(key) {
110+
var header = proxyRes.headers[key];
111+
if (preserveHeaderKeyCase) {
112+
key = rawHeaderKeyMap[key] || key;
113+
}
114+
setHeader(key, header);
115+
});
122116
},
123117

124118
/**

test/lib-http-proxy-passes-web-outgoing-test.js

+13
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,14 @@ describe('lib/http-proxy/passes/web-outgoing.js', function () {
240240
}
241241
};
242242
this.rawProxyRes = {
243+
headers: {
244+
hey: 'hello',
245+
how: 'are you?',
246+
'set-cookie': [
247+
'hello; domain=my.domain; path=/',
248+
'there; domain=my.domain; path=/'
249+
]
250+
},
243251
rawHeaders: [
244252
'Hey', 'hello',
245253
'How', 'are you?',
@@ -343,6 +351,11 @@ describe('lib/http-proxy/passes/web-outgoing.js', function () {
343351
'my.special.domain': 'my.special.domain'
344352
}
345353
};
354+
this.rawProxyRes.headers['set-cookie'] = [
355+
'hello-on-my.domain; domain=my.domain; path=/',
356+
'hello-on-my.old.domain; domain=my.old.domain; path=/',
357+
'hello-on-my.special.domain; domain=my.special.domain; path=/'
358+
];
346359
this.rawProxyRes.rawHeaders = this.rawProxyRes.rawHeaders.concat([
347360
'Set-Cookie',
348361
'hello-on-my.domain; domain=my.domain; path=/',

0 commit comments

Comments
 (0)