Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit c1d18f8

Browse files
committed
0.1.4 (fix a error inside forwarded logic)
1 parent 394966a commit c1d18f8

5 files changed

Lines changed: 102 additions & 96 deletions

File tree

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,19 @@ module.exports = {
6969

7070
const encrypted = req.isSpdy || common.hasEncryptedConnection(req);
7171
const values = {
72-
For: req.connection.remoteAddress || req.socket.remoteAddress,
72+
For: req.headers["CF-Connecting-IP"] || req.connection.remoteAddress || req.socket.remoteAddress,
7373
Port: common.getPort(req),
7474
Proto: encrypted ? "https" : "http",
7575
};
7676

77-
["For", "Port", "Proto"].forEach(function (header) {
78-
req.headers["X-Forwarded-" + header] =
79-
(req.headers["X-Forwarded-" + header] || "") + (req.headers["X-Forwarded-" + header] ? "," : "") + values[header];
80-
});
77+
for (const header of ["For", "Port", "Proto"]) {
78+
const headerName = `X-Forwarded-${header}`;
79+
if (req.headers?.[headerName]) {
80+
req.headers[headerName] += `, ${values[header]}`;
81+
} else {
82+
req.headers[headerName] = values[header];
83+
}
84+
}
8185

8286
req.headers["X-Forwarded-Host"] = req.headers["X-Forwarded-Host"] || req.headers.host || "";
8387
},

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ module.exports = {
112112
rawHeaderKeyMap = {};
113113

114114
for (let i = 0; i < proxyRes.rawHeaders.length; i += 2) {
115-
rawHeaderKeyMap[proxyRes.rawHeaders[i].toLowerCase()] = proxyRes.rawHeaders[i];
115+
const lowerKey = proxyRes.rawHeaders[i].toLowerCase();
116+
rawHeaderKeyMap[lowerKey] = proxyRes.rawHeaders[i];
116117
}
117118
}
118119

lib/http-proxy/passes/ws-incoming.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,19 @@ module.exports = {
4747
if (!options.xfwd) return;
4848

4949
const values = {
50-
For: req.connection.remoteAddress || req.socket.remoteAddress,
50+
For: req.headers["CF-Connecting-IP"] || req.connection.remoteAddress || req.socket.remoteAddress,
5151
Port: common.getPort(req),
5252
Proto: common.hasEncryptedConnection(req) ? "wss" : "ws",
5353
};
5454

55-
["For", "Port", "Proto"].forEach(function (header) {
56-
req.headers["X-Forwarded-" + header] =
57-
(req.headers["X-Forwarded-" + header] || "") + (req.headers["X-Forwarded-" + header] ? "," : "") + values[header];
58-
});
55+
for (const header of ["For", "Port", "Proto"]) {
56+
const headerName = `X-Forwarded-${header}`;
57+
if (req.headers?.[headerName]) {
58+
req.headers[headerName] += `, ${values[header]}`;
59+
} else {
60+
req.headers[headerName] = values[header];
61+
}
62+
}
5963
},
6064

6165
/**

package-lock.json

Lines changed: 80 additions & 83 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)