Skip to content
This repository was archived by the owner on Feb 2, 2024. It is now read-only.

Commit 00a76fa

Browse files
authored
Update travis nodejs version to 12 (#38)
Removing `content-length` header sanitation for GET/HEAD requests.
1 parent b5927ce commit 00a76fa

File tree

6 files changed

+39
-16
lines changed

6 files changed

+39
-16
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,6 @@ typings/
5757
# dotenv environment variables file
5858
.env
5959

60-
.vscode/
60+
.vscode/
61+
62+
.idea

.travis.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
language: node_js
22
node_js:
3-
- "10"
3+
- "12"
44

55
before_install:
6-
# package-lock.json was introduced in npm@5
7-
- '[[ $(node -v) =~ ^v9.*$ ]] || npm install -g npm@latest' # skipped when using node 9
6+
- npm install -g npm@latest
87
- npm install -g greenkeeper-lockfile
98
install: npm install
109
before_script: greenkeeper-lockfile-update

index.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ const buildRequest = require('./lib/request')
99
const {
1010
filterPseudoHeaders,
1111
copyHeaders,
12-
stripHttp1ConnectionHeaders
12+
stripHttp1ConnectionHeaders,
13+
filterHeaders
1314
} = require('./lib/utils')
1415

1516
function populateHeaders (headers, body, contentType) {
@@ -40,7 +41,7 @@ module.exports = (opts) => {
4041

4142
const url = getReqUrl(source || req.url, cache, base, opts)
4243
const sourceHttp2 = req.httpVersionMajor === 2
43-
const headers = { ...sourceHttp2 ? filterPseudoHeaders(req.headers) : req.headers }
44+
let headers = { ...sourceHttp2 ? filterPseudoHeaders(req.headers) : req.headers }
4445
headers['x-forwarded-host'] = req.headers.host
4546
headers.host = url.hostname
4647
if (url.port) {
@@ -54,7 +55,9 @@ module.exports = (opts) => {
5455
// proxy should ignore message body when it's a GET or HEAD request
5556
// when proxy this request, we should reset the content-length to make it a valid http request
5657
if (req.method === 'GET' || req.method === 'HEAD') {
57-
headers['content-length'] = 0
58+
if (headers['content-length']) {
59+
headers = filterHeaders(headers, 'content-length')
60+
}
5861
} else {
5962
if (req.body) {
6063
if (req.body instanceof Stream) {

lib/utils.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,24 @@ function stripHttp1ConnectionHeaders (headers) {
5555
return dest
5656
}
5757

58+
function filterHeaders (headers, filter) {
59+
const headersKeys = Object.keys(headers)
60+
const dest = {}
61+
62+
let header
63+
let i
64+
for (i = 0; i < headersKeys.length; i++) {
65+
header = headersKeys[i].toLowerCase()
66+
if (header !== filter) {
67+
dest[header] = headers[header]
68+
}
69+
}
70+
return dest
71+
}
72+
5873
module.exports = {
5974
copyHeaders,
6075
stripHttp1ConnectionHeaders,
61-
filterPseudoHeaders
76+
filterPseudoHeaders,
77+
filterHeaders
6278
}

package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@
3737
"0http": "^2.5.2",
3838
"body-parser": "^1.19.0",
3939
"chai": "^4.2.0",
40-
"fastify": "^2.15.1",
41-
"fastify-reply-from": "^2.1.0",
42-
"follow-redirects": "^1.11.0",
40+
"fastify": "^3.0.3",
41+
"fastify-reply-from": "^3.1.2",
42+
"follow-redirects": "^1.12.1",
4343
"h2url": "^0.2.0",
4444
"http-proxy": "^1.18.1",
45-
"mocha": "^7.2.0",
46-
"nock": "^12.0.3",
45+
"mocha": "^8.0.1",
46+
"nock": "^13.0.2",
4747
"nyc": "^15.1.0",
4848
"pem": "^1.14.4",
49-
"restana": "^4.6.1",
49+
"restana": "^4.6.2",
5050
"standard": "^14.3.4",
5151
"supertest": "^4.0.2"
5252
},
@@ -55,6 +55,6 @@
5555
"pump": "^3.0.0",
5656
"semver": "^7.3.2",
5757
"tiny-lru": "^7.0.6",
58-
"undici": "^1.0.3"
58+
"undici": "^1.2.2"
5959
}
6060
}

test/5.undici.test.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ describe('undici', () => {
4747
})
4848
service.get('/service/headers', (req, res) => {
4949
res.setHeader('x-agent', 'fast-proxy')
50-
res.send()
50+
res.send(req.headers)
5151
})
5252
service.get('/service/timeout', async (req, res) => {
5353
await sleep(200)
@@ -78,8 +78,11 @@ describe('undici', () => {
7878
await request(gHttpServer)
7979
.get('/service/headers')
8080
.expect(200)
81+
.set('content-length', '10')
8182
.then((response) => {
8283
expect(response.headers['x-agent']).to.equal('fast-proxy')
84+
expect(response.body['content-length']).to.equal(undefined) // content-length is stripped for GET / HEAD requests
85+
expect(response.body.host).to.equal('127.0.0.1:3000')
8386
})
8487
})
8588

0 commit comments

Comments
 (0)