Skip to content

Commit ff57a46

Browse files
committed
Keep original letter case of response header keys
1 parent 2f7f037 commit ff57a46

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,16 @@ module.exports = { // <--
8787
if (typeof rewriteCookieDomainConfig === 'string') { //also test for ''
8888
rewriteCookieDomainConfig = { '*': rewriteCookieDomainConfig };
8989
}
90-
Object.keys(proxyRes.headers).forEach(function(key) {
91-
var header = proxyRes.headers[key];
90+
for (var i = 0; i < proxyRes.rawHeaders.length; i += 2) {
91+
var key = proxyRes.rawHeaders[i];
92+
var header = proxyRes.rawHeaders[i + 1];
9293
if (header != undefined) {
9394
if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') {
9495
header = common.rewriteCookieDomain(header, rewriteCookieDomainConfig);
9596
}
9697
res.setHeader(String(key).trim(), header);
9798
}
98-
});
99+
};
99100
},
100101

101102
/**

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,18 @@ describe('lib/http-proxy/passes/web-outgoing.js', function () {
234234
hey: 'hello',
235235
how: 'are you?',
236236
'set-cookie': 'hello; domain=my.domain; path=/'
237-
}
237+
},
238+
rawHeaders: [
239+
'Hey', 'hello',
240+
'How', 'are you?',
241+
'Set-Cookie', 'hello; domain=my.domain; path=/'
242+
]
238243
};
239244
this.res = {
240245
setHeader: function(k, v) {
241-
this.headers[k] = v;
246+
// https://nodejs.org/api/http.html#http_message_headers
247+
// Header names are lower-cased
248+
this.headers[k.toLowerCase()] = v;
242249
},
243250
headers: {}
244251
};
@@ -260,7 +267,7 @@ describe('lib/http-proxy/passes/web-outgoing.js', function () {
260267

261268
expect(this.res.headers['set-cookie']).to.eql('hello; domain=my.domain; path=/');
262269
});
263-
270+
264271
it('rewrites domain', function() {
265272
var options = {
266273
cookieDomainRewrite: 'my.new.domain'
@@ -294,6 +301,12 @@ describe('lib/http-proxy/passes/web-outgoing.js', function () {
294301
'hello-on-my.old.domain; domain=my.old.domain; path=/',
295302
'hello-on-my.special.domain; domain=my.special.domain; path=/'
296303
];
304+
var setCookieValueIndex = this.proxyRes.rawHeaders.indexOf('Set-Cookie') + 1;
305+
this.proxyRes.rawHeaders[setCookieValueIndex] = [
306+
'hello-on-my.domain; domain=my.domain; path=/',
307+
'hello-on-my.old.domain; domain=my.old.domain; path=/',
308+
'hello-on-my.special.domain; domain=my.special.domain; path=/'
309+
];
297310

298311
httpProxy.writeHeaders({}, this.res, this.proxyRes, options);
299312

test/lib-http-proxy-test.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ describe('lib/http-proxy.js', function() {
148148
method: 'GET'
149149
}, function(res) {
150150
expect(res.statusCode).to.eql(200);
151+
expect(res.headers['content-type']).to.eql('text/plain');
152+
expect(res.rawHeaders.indexOf('Content-Type')).not.to.eql(-1);
153+
expect(res.rawHeaders.indexOf('text/plain')).not.to.eql(-1);
151154

152155
res.on('data', function (data) {
153156
expect(data.toString()).to.eql('Hello from ' + ports.source);

0 commit comments

Comments
 (0)