Skip to content

Commit

Permalink
feat: show warning on 431 response
Browse files Browse the repository at this point in the history
  • Loading branch information
sapphi-red committed Jul 23, 2022
1 parent e66cf69 commit da9bd34
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 2 deletions.
25 changes: 25 additions & 0 deletions packages/vite/src/node/http.ts
Expand Up @@ -6,6 +6,7 @@ import type {
} from 'node:http'
import type { ServerOptions as HttpsServerOptions } from 'node:https'
import type { Connect } from 'types/connect'
import colors from 'picocolors'
import { isObject } from './utils'
import type { ProxyOptions } from './server/middlewares/proxy'
import type { Logger } from './logger'
Expand Down Expand Up @@ -183,3 +184,27 @@ export async function httpServerStart(
})
})
}

export function setClientErrorHandler(
server: HttpServer,
logger: Logger
): void {
server.on('clientError', (err, socket) => {
if ((err as any).code === 'HPE_HEADER_OVERFLOW') {
if (!socket.writableEnded) {
socket.end(
'HTTP/1.1 431 Request Header Fields Too Large\r\n\r\n' +
'Request Header was too large. Node.js limits request header size. ' +
'Use https://nodejs.org/api/cli.html#--max-http-header-sizesize to change max header size.'
)
}
logger.warn(
colors.yellow(
'Server / WS server responded with "431 Request Header Fields Too Large." ' +
'Node.js limits request header size and the request was dropped. ' +
'Use https://nodejs.org/api/cli.html#--max-http-header-sizesize to change max header size.'
)
)
}
})
}
8 changes: 7 additions & 1 deletion packages/vite/src/node/preview.ts
Expand Up @@ -6,7 +6,12 @@ import type { Connect } from 'types/connect'
import corsMiddleware from 'cors'
import type { ResolvedServerOptions, ResolvedServerUrls } from './server'
import type { CommonServerOptions } from './http'
import { httpServerStart, resolveHttpServer, resolveHttpsConfig } from './http'
import {
httpServerStart,
resolveHttpServer,
resolveHttpsConfig,
setClientErrorHandler
} from './http'
import { openBrowser } from './server/openBrowser'
import compression from './server/middlewares/compression'
import { proxyMiddleware } from './server/middlewares/proxy'
Expand Down Expand Up @@ -78,6 +83,7 @@ export async function preview(
app,
await resolveHttpsConfig(config.preview?.https, config.cacheDir)
)
setClientErrorHandler(httpServer, config.logger)

// apply server hooks from plugins
const postHooks: ((() => void) | void)[] = []
Expand Down
11 changes: 10 additions & 1 deletion packages/vite/src/node/server/index.ts
Expand Up @@ -12,7 +12,12 @@ import type { Connect } from 'types/connect'
import launchEditorMiddleware from 'launch-editor-middleware'
import type { SourceMap } from 'rollup'
import type { CommonServerOptions } from '../http'
import { httpServerStart, resolveHttpServer, resolveHttpsConfig } from '../http'
import {
httpServerStart,
resolveHttpServer,
resolveHttpsConfig,
setClientErrorHandler
} from '../http'
import type { InlineConfig, ResolvedConfig } from '../config'
import { isDepsOptimizerEnabled, resolveConfig } from '../config'
import {
Expand Down Expand Up @@ -301,6 +306,10 @@ export async function createServer(
: await resolveHttpServer(serverConfig, middlewares, httpsOptions)
const ws = createWebSocketServer(httpServer, config, httpsOptions)

if (httpServer) {
setClientErrorHandler(httpServer, config.logger)
}

const { ignored = [], ...watchOptions } = serverConfig.watch || {}
const watcher = chokidar.watch(path.resolve(root), {
ignored: [
Expand Down

0 comments on commit da9bd34

Please sign in to comment.