Skip to content

Commit 427fd00

Browse files
committed
Add a getAllHeaders function to the http module
Users should not have to access private attributes like res._headers in order to get all the headers in a request. Define a method getAllHeaders to return an object which is a copy of re._headers Fixes issue #3992
1 parent b4a670a commit 427fd00

File tree

4 files changed

+40
-71
lines changed

4 files changed

+40
-71
lines changed

doc/api/http.markdown

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,15 @@ Example:
380380

381381
var contentType = response.getHeader('content-type');
382382

383+
### response.getAllHeaders()
384+
385+
Reads out all headers that are already been queued but not yet sent to the
386+
client. This can only be called before headers get implicitly flushed.
387+
388+
Example:
389+
390+
var headers = response.getAllHeaders();
391+
383392
### response.removeHeader(name)
384393

385394
Removes a header that's queued for implicit sending.

lib/_http_outgoing.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,14 @@ OutgoingMessage.prototype.getHeader = function(name) {
360360
};
361361

362362

363+
OutgoingMessage.prototype.getAllHeaders = function() {
364+
if (!this._headers)
365+
return;
366+
else
367+
return util._extend({}, this._headers);
368+
};
369+
370+
363371
OutgoingMessage.prototype.removeHeader = function(name) {
364372
if (arguments.length < 1) {
365373
throw new Error('`name` is required for removeHeader().');
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var common = require('../common');
2+
var assert = require('assert');
3+
var http = require('http');
4+
5+
// Verify that ServerResponse.getHeader() works correctly even after
6+
// the response header has been sent. Issue 752 on github.
7+
8+
var rando = Math.random();
9+
var expected = util._extend({}, {
10+
'X-Random-Thing': rando,
11+
});
12+
var server = http.createServer(function(req, res) {
13+
res.setHeader('X-Random-Thing', rando);
14+
headers = res.getAllHeaders();
15+
res.end('hello');
16+
assert.strictEqual(res.getAllHeaders(), null);
17+
});
18+
server.listen(common.PORT, function() {
19+
http.get({port: common.PORT}, function(resp) {
20+
assert.deepEqual(response.headers, expected);
21+
server.close();
22+
});
23+
});

test/simple/test-http-header-get-all.js

Lines changed: 0 additions & 71 deletions
This file was deleted.

0 commit comments

Comments
 (0)