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

Commit 6ae5f1d

Browse files
authored
Merge pull request #46 from fastify/adding-authority-header-support-http2
fixing authority header support for http2 updating undici to v3.x
2 parents c9abeb4 + 39f749d commit 6ae5f1d

File tree

5 files changed

+28
-17
lines changed

5 files changed

+28
-17
lines changed

index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ module.exports = (opts) => {
4242
const url = getReqUrl(source || req.url, cache, base, opts)
4343
const sourceHttp2 = req.httpVersionMajor === 2
4444
let headers = { ...sourceHttp2 ? filterPseudoHeaders(req.headers) : req.headers }
45-
headers['x-forwarded-host'] = req.headers.host
45+
46+
headers['x-forwarded-host'] = headers.host
4647
headers.host = url.hostname
4748
if (url.port) {
4849
headers.host += `:${url.port}`
@@ -91,7 +92,7 @@ module.exports = (opts) => {
9192
if (err.code === 'ECONNREFUSED' || err.code === 'ERR_HTTP2_STREAM_CANCEL') {
9293
res.statusCode = 503
9394
res.end('Service Unavailable')
94-
} else if (err.code === 'ECONNRESET' || err.code === 'UND_ERR_REQUEST_TIMEOUT') {
95+
} else if (err.code === 'ECONNRESET' || err.code === 'UND_ERR_HEADERS_TIMEOUT' || err.code === 'UND_ERR_BODY_TIMEOUT') {
9596
res.statusCode = 504
9697
res.end(err.message)
9798
} else {

lib/utils.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ function filterPseudoHeaders (headers) {
44
const dest = {}
55
const headersKeys = Object.keys(headers)
66

7+
if (headers[':authority']) {
8+
// see: https://nodejs.org/api/http2.html#http2_note_on_authority_and_host
9+
dest.host = headers[':authority']
10+
}
11+
712
let header
813
let i
914
for (i = 0; i < headersKeys.length; i++) {
@@ -12,6 +17,7 @@ function filterPseudoHeaders (headers) {
1217
dest[header.toLowerCase()] = headers[header]
1318
}
1419
}
20+
1521
return dest
1622
}
1723

package.json

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,25 @@
3434
},
3535
"homepage": "https://github.com/fastify/fast-proxy",
3636
"devDependencies": {
37-
"0http": "^2.5.2",
37+
"0http": "^3.0.0",
3838
"body-parser": "^1.19.0",
39-
"chai": "^4.2.0",
40-
"fastify": "^3.0.3",
41-
"fastify-reply-from": "^3.1.2",
42-
"follow-redirects": "^1.13.0",
39+
"chai": "^4.3.0",
40+
"follow-redirects": "^1.13.3",
4341
"h2url": "^0.2.0",
4442
"http-proxy": "^1.18.1",
45-
"mocha": "^8.0.1",
46-
"nock": "^13.0.2",
43+
"mocha": "^8.3.0",
44+
"nock": "^13.0.9",
4745
"nyc": "^15.1.0",
4846
"pem": "^1.14.4",
49-
"restana": "^4.6.2",
50-
"standard": "^14.3.4",
51-
"supertest": "^4.0.2"
47+
"restana": "^4.8.1",
48+
"standard": "^16.0.3",
49+
"supertest": "^6.1.3"
5250
},
5351
"dependencies": {
5452
"end-of-stream": "^1.4.4",
5553
"pump": "^3.0.0",
56-
"semver": "^7.3.2",
54+
"semver": "^7.3.4",
5755
"tiny-lru": "^7.0.6",
58-
"undici": "^1.2.2"
56+
"undici": "^3.3.3"
5957
}
6058
}

test/3.http2.test.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ describe('http2', () => {
8787

8888
service.get('/service/headers', (req, res) => {
8989
res.setHeader('x-agent', 'fast-proxy')
90+
res.setHeader('x-forwarded-host', req.headers['x-forwarded-host'])
91+
9092
res.send()
9193
})
9294

@@ -96,10 +98,14 @@ describe('http2', () => {
9698

9799
it('should 200 on GET headers', async () => {
98100
const { headers } = await h2url.concat({
99-
url: 'https://localhost:8080/service/headers'
101+
url: 'https://localhost:8080/service/headers',
102+
headers: {
103+
':authority': 'nodejs.org:443'
104+
}
100105
})
101106
expect(headers[':status']).to.equal(200)
102107
expect(headers['x-agent']).to.equal('fast-proxy')
108+
expect(headers['x-forwarded-host']).to.equal('nodejs.org:443')
103109
})
104110

105111
it('should timeout on GET /service/longop', async () => {

test/5.undici.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ describe('undici', () => {
1515
base: 'http://127.0.0.1:3000',
1616
undici: {
1717
pipelining: 10,
18-
requestTimeout: 100
18+
headersTimeout: 100
1919
}
2020
})
2121
close = fastProxy.close
@@ -57,7 +57,7 @@ describe('undici', () => {
5757
})
5858
service.get('/service/timeout', async (req, res) => {
5959
await sleep(200)
60-
res.send()
60+
res.send('OK')
6161
})
6262

6363
service.start(3000).then(() => done())

0 commit comments

Comments
 (0)