Skip to content

Commit 28634e2

Browse files
alexander-akaitwesleytodd
authored andcommitted
fix: ignore status message for HTTP/2 (#53)
1 parent 45cf67c commit 28634e2

File tree

4 files changed

+303
-114
lines changed

4 files changed

+303
-114
lines changed

HISTORY.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ v1.2.1 / 2024-09-02
22
==================
33

44
* Gracefully handle when handling an error and socket is null
5+
* ignore status message for HTTP/2 (#53)
56

67
1.2.0 / 2022-03-22
78
==================

index.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,10 @@ function send (req, res, status, headers, message) {
278278

279279
// response status
280280
res.statusCode = status
281-
res.statusMessage = statuses.message[status]
281+
282+
if (req.httpVersionMajor < 2) {
283+
res.statusMessage = statuses.message[status]
284+
}
282285

283286
// remove any content headers
284287
res.removeHeader('Content-Encoding')

test/support/utils.js

+92-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
var assert = require('assert')
22
var finalhandler = require('../..')
33
var http = require('http')
4+
5+
var http2
6+
7+
try {
8+
http2 = require('http2')
9+
} catch (_err) {
10+
// Nothing
11+
}
12+
413
var request = require('supertest')
514
var SlowWriteStream = require('./sws')
615

716
exports.assert = assert
817
exports.createError = createError
9-
exports.createServer = createServer
18+
exports.createHTTPServer = createHTTPServer
19+
exports.createHTTP2Server = createHTTP2Server
1020
exports.createSlowWriteStream = createSlowWriteStream
1121
exports.rawrequest = rawrequest
22+
exports.rawrequestHTTP2 = rawrequestHTTP2
1223
exports.request = request
1324
exports.shouldHaveStatusMessage = shouldHaveStatusMessage
1425
exports.shouldNotHaveBody = shouldNotHaveBody
@@ -26,7 +37,7 @@ function createError (message, props) {
2637
return err
2738
}
2839

29-
function createServer (err, opts) {
40+
function createHTTPServer (err, opts) {
3041
return http.createServer(function (req, res) {
3142
var done = finalhandler(req, res, opts)
3243

@@ -39,6 +50,19 @@ function createServer (err, opts) {
3950
})
4051
}
4152

53+
function createHTTP2Server (err, opts) {
54+
return http2.createServer(function (req, res) {
55+
var done = finalhandler(req, res, opts)
56+
57+
if (typeof err === 'function') {
58+
err(req, res, done)
59+
return
60+
}
61+
62+
done(err)
63+
})
64+
}
65+
4266
function createSlowWriteStream () {
4367
return new SlowWriteStream()
4468
}
@@ -107,6 +131,72 @@ function rawrequest (server) {
107131
}
108132
}
109133

134+
function rawrequestHTTP2 (server) {
135+
var _headers = {}
136+
var _path
137+
138+
function expect (status, body, callback) {
139+
if (arguments.length === 2) {
140+
_headers[status.toLowerCase()] = body
141+
return this
142+
}
143+
144+
server.listen(function onlisten () {
145+
var buf = ''
146+
var resHeaders
147+
var addr = this.address()
148+
var port = addr.port
149+
150+
var client = http2.connect('http://127.0.0.1:' + port)
151+
var req = client.request({
152+
':method': 'GET',
153+
':path': _path.replace(/http:\/\/localhost/, '')
154+
})
155+
req.on('error', callback)
156+
req.on('response', function onresponse (responseHeaders) {
157+
resHeaders = responseHeaders
158+
})
159+
req.on('data', function ondata (s) { buf += s })
160+
req.on('end', function onend () {
161+
var err = null
162+
163+
try {
164+
for (var key in _headers) {
165+
assert.strictEqual(resHeaders[key], _headers[key])
166+
}
167+
168+
assert.strictEqual(resHeaders[':status'], status)
169+
170+
if (body instanceof RegExp) {
171+
assert.ok(body.test(buf), 'expected body ' + buf + ' to match ' + body)
172+
} else {
173+
assert.strictEqual(buf, body, 'expected ' + body + ' response body, got ' + buf)
174+
}
175+
} catch (e) {
176+
err = e
177+
}
178+
179+
req.close()
180+
client.close()
181+
server.close()
182+
callback(err)
183+
})
184+
})
185+
}
186+
187+
function get (path) {
188+
_path = path
189+
190+
return {
191+
expect: expect
192+
}
193+
}
194+
195+
return {
196+
get: get
197+
}
198+
}
199+
110200
function shouldHaveStatusMessage (statusMessage) {
111201
return function (test) {
112202
assert.strictEqual(test.res.statusMessage, statusMessage, 'should have statusMessage "' + statusMessage + '"')

0 commit comments

Comments
 (0)