Skip to content

Commit c85c9ee

Browse files
authored
feat: send 408 on request timeout (#22476)
1 parent 40985f1 commit c85c9ee

1 file changed

Lines changed: 26 additions & 10 deletions

File tree

packages/vite/src/node/http.ts

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -273,19 +273,35 @@ export function setClientErrorHandler(
273273
logger: Logger,
274274
): void {
275275
server.on('clientError', (err, socket) => {
276-
let msg = '400 Bad Request'
277-
if ((err as any).code === 'HPE_HEADER_OVERFLOW') {
278-
msg = '431 Request Header Fields Too Large'
279-
logger.warn(
280-
colors.yellow(
281-
'Server responded with status code 431. ' +
282-
'See https://vite.dev/guide/troubleshooting.html#_431-request-header-fields-too-large.',
283-
),
284-
)
276+
// https://github.com/nodejs/node/blob/v26.2.0/lib/_http_server.js#L992
277+
let msg
278+
switch ((err as any).code) {
279+
case 'HPE_HEADER_OVERFLOW': {
280+
msg = '431 Request Header Fields Too Large'
281+
logger.warn(
282+
colors.yellow(
283+
'Server responded with status code 431. ' +
284+
'See https://vite.dev/guide/troubleshooting.html#_431-request-header-fields-too-large.',
285+
),
286+
)
287+
break
288+
}
289+
case 'HPE_CHUNK_EXTENSIONS_OVERFLOW': {
290+
msg = '413 Payload Too Large'
291+
break
292+
}
293+
case 'ERR_HTTP_REQUEST_TIMEOUT': {
294+
msg = '408 Request Timeout'
295+
break
296+
}
297+
default: {
298+
msg = '400 Bad Request'
299+
break
300+
}
285301
}
286302
if ((err as any).code === 'ECONNRESET' || !socket.writable) {
287303
return
288304
}
289-
socket.end(`HTTP/1.1 ${msg}\r\n\r\n`)
305+
socket.end(`HTTP/1.1 ${msg}\r\nConnection: close\r\n\r\n`)
290306
})
291307
}

0 commit comments

Comments
 (0)