Skip to content

Commit 01df4a8

Browse files
committed
inspector: convert a header object to a simple string dictionary
1 parent 4d446e4 commit 01df4a8

2 files changed

Lines changed: 31 additions & 2 deletions

File tree

lib/internal/inspector_network_tracking.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
'use strict';
22

33
const {
4+
ArrayIsArray,
45
DateNow,
6+
ObjectEntries,
57
} = primordials;
68

79
let dc;
@@ -10,6 +12,17 @@ let Network;
1012
let requestId = 0;
1113
const getNextRequestId = () => `node-network-event-${++requestId}`;
1214

15+
// Convert a Headers object (Map<string, number | string | string[]>) to a plain object (Map<string, string>)
16+
const headerObjectToDictionary = (headers = {}) => {
17+
const dict = {};
18+
for (const { 0: key, 1: value } of ObjectEntries(headers)) {
19+
if (typeof value === 'string') dict[key] = value;
20+
if (ArrayIsArray(value)) dict[key] = value.join(', ');
21+
else dict[key] = value.toString();
22+
}
23+
return dict;
24+
};
25+
1326
function onClientRequestStart({ request }) {
1427
const url = `${request.protocol}//${request.host}${request.path}`;
1528
const wallTime = DateNow();
@@ -22,7 +35,7 @@ function onClientRequestStart({ request }) {
2235
request: {
2336
url,
2437
method: request.method,
25-
headers: request.getHeaders(),
38+
headers: headerObjectToDictionary(request.getHeaders()),
2639
},
2740
});
2841
}
@@ -41,7 +54,7 @@ function onClientResponseFinish({ request, response }) {
4154
url,
4255
status: response.statusCode,
4356
statusText: response.statusMessage ?? '',
44-
headers: response.headers,
57+
headers: headerObjectToDictionary(response.headers),
4558
},
4659
});
4760
Network.loadingFinished({

test/parallel/test-inspector-network-domain.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ const testHttpGet = () => new Promise((resolve, reject) => {
5353
assert.strictEqual(params.request.url, 'http://127.0.0.1/hello-world');
5454
assert.strictEqual(params.request.method, 'GET');
5555
assert.strictEqual(typeof params.request.headers, 'object');
56+
assert.strictEqual(params.request.headers['accept-language'], 'en-US');
57+
assert.strictEqual(params.request.headers.cookie, 'k1=v1, k2=v2');
58+
assert.strictEqual(params.request.headers.age, '1000');
5659
assert.strictEqual(typeof params.timestamp, 'number');
5760
assert.strictEqual(typeof params.wallTime, 'number');
5861
}));
@@ -75,6 +78,11 @@ const testHttpGet = () => new Promise((resolve, reject) => {
7578
host: '127.0.0.1',
7679
port: httpServer.address().port,
7780
path: '/hello-world',
81+
headers: {
82+
'accept-language': 'en-US',
83+
'cookie': ['k1=v1', 'k2=v2'],
84+
'age': 1000
85+
}
7886
}, common.mustCall());
7987
});
8088

@@ -84,6 +92,9 @@ const testHttpsGet = () => new Promise((resolve, reject) => {
8492
assert.strictEqual(params.request.url, 'https://127.0.0.1/hello-world');
8593
assert.strictEqual(params.request.method, 'GET');
8694
assert.strictEqual(typeof params.request.headers, 'object');
95+
assert.strictEqual(params.request.headers['accept-language'], 'en-US');
96+
assert.strictEqual(params.request.headers.cookie, 'k1=v1, k2=v2');
97+
assert.strictEqual(params.request.headers.age, '1000');
8798
assert.strictEqual(typeof params.timestamp, 'number');
8899
assert.strictEqual(typeof params.wallTime, 'number');
89100
}));
@@ -107,6 +118,11 @@ const testHttpsGet = () => new Promise((resolve, reject) => {
107118
port: httpsServer.address().port,
108119
path: '/hello-world',
109120
rejectUnauthorized: false,
121+
headers: {
122+
'accept-language': 'en-US',
123+
'cookie': ['k1=v1', 'k2=v2'],
124+
'age': 1000
125+
}
110126
}, common.mustCall());
111127
});
112128

0 commit comments

Comments
 (0)