From 5d57541ca4d46106035e75ae136d53926a3d17a1 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 7 May 2023 08:07:02 +0545 Subject: [PATCH 1/2] fix: handle ping requests before they reach user middleware --- packages/vite/src/client/client.ts | 5 +++++ packages/vite/src/node/server/index.ts | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/packages/vite/src/client/client.ts b/packages/vite/src/client/client.ts index ed1cab3eb17c2e..0abf5bccef0944 100644 --- a/packages/vite/src/client/client.ts +++ b/packages/vite/src/client/client.ts @@ -321,6 +321,11 @@ async function waitForSuccessfulPing( try { await fetch(`${pingHostProtocol}://${hostAndPath}`, { mode: 'no-cors', + headers: { + // Custom headers won't be included in a request with no-cors so (ab)use one of the + // safelisted headers to identify the ping request + Accept: 'text/x-vite-ping', + }, }) return true } catch {} diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 0831cd01fe3743..b8abda786fb941 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -608,6 +608,15 @@ export async function _createServer( // open in editor support middlewares.use('/__open-in-editor', launchEditorMiddleware()) + // ping request handler + middlewares.use((req, res, next) => { + if (req.headers['accept'] === 'text/x-vite-ping') { + res.writeHead(204).end() + } else { + next() + } + }) + // serve static files under /public // this applies before the transform middleware so that these files are served // as-is without transforms. From 0e58633a08de02d40351427aec7ce66851cf38fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Tue, 9 May 2023 00:25:12 +0900 Subject: [PATCH 2/2] chore: make it a named function --- packages/vite/src/node/server/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index b8abda786fb941..541372996c2f4b 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -609,7 +609,8 @@ export async function _createServer( middlewares.use('/__open-in-editor', launchEditorMiddleware()) // ping request handler - middlewares.use((req, res, next) => { + // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...` + middlewares.use(function viteHMRPingMiddleware(req, res, next) { if (req.headers['accept'] === 'text/x-vite-ping') { res.writeHead(204).end() } else {