diff --git a/packages/vite/src/node/server/middlewares/proxy.ts b/packages/vite/src/node/server/middlewares/proxy.ts
index bf658a9ea7474f..219d15f3c81d21 100644
--- a/packages/vite/src/node/server/middlewares/proxy.ts
+++ b/packages/vite/src/node/server/middlewares/proxy.ts
@@ -154,7 +154,8 @@ export function proxyMiddleware(
return next()
} else if (bypassResult === false) {
debug?.(`bypass: ${req.url} -> 404`)
- return res.end(404)
+ res.statusCode = 404
+ return res.end()
}
}
diff --git a/playground/proxy-bypass/__tests__/proxy-hmr.spec.ts b/playground/proxy-bypass/__tests__/proxy-hmr.spec.ts
new file mode 100644
index 00000000000000..093179072a4118
--- /dev/null
+++ b/playground/proxy-bypass/__tests__/proxy-hmr.spec.ts
@@ -0,0 +1,8 @@
+import { expect, test, vi } from 'vitest'
+import { browserLogs } from '~utils'
+
+test('proxy-bypass', async () => {
+ await vi.waitFor(() => {
+ expect(browserLogs.join('\n')).toContain('status of 404 (Not Found)')
+ })
+})
diff --git a/playground/proxy-bypass/index.html b/playground/proxy-bypass/index.html
new file mode 100644
index 00000000000000..f14fde8e428635
--- /dev/null
+++ b/playground/proxy-bypass/index.html
@@ -0,0 +1,2 @@
+root app
+
diff --git a/playground/proxy-bypass/package.json b/playground/proxy-bypass/package.json
new file mode 100644
index 00000000000000..fa9ecab396977a
--- /dev/null
+++ b/playground/proxy-bypass/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "@vitejs/test-proxy-bypass",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ }
+}
diff --git a/playground/proxy-bypass/vite.config.js b/playground/proxy-bypass/vite.config.js
new file mode 100644
index 00000000000000..13f7a6b42eaafb
--- /dev/null
+++ b/playground/proxy-bypass/vite.config.js
@@ -0,0 +1,15 @@
+import { defineConfig } from 'vite'
+
+export default defineConfig({
+ server: {
+ port: 9606,
+ proxy: {
+ '/anotherApp': {
+ target: 'http://localhost:9607',
+ bypass: () => {
+ return false
+ },
+ },
+ },
+ },
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e0406f3389b179..a421b405b6f0b6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1030,6 +1030,8 @@ importers:
playground/preserve-symlinks/module-a: {}
+ playground/proxy-bypass: {}
+
playground/proxy-hmr: {}
playground/proxy-hmr/other-app: {}