( server: HttpServer, logger: Logger, )
| 269 | } |
| 270 | |
| 271 | export function setClientErrorHandler( |
| 272 | server: HttpServer, |
| 273 | logger: Logger, |
| 274 | ): void { |
| 275 | server.on('clientError', (err, socket) => { |
| 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 | } |
| 301 | } |
| 302 | if ((err as any).code === 'ECONNRESET' || !socket.writable) { |
| 303 | return |
| 304 | } |
| 305 | socket.end(`HTTP/1.1 ${msg}\r\nConnection: close\r\n\r\n`) |
| 306 | }) |
| 307 | } |
no test coverage detected