From ab666ec2a4835ad2bb715ee288a06dca7b6f16ef Mon Sep 17 00:00:00 2001 From: Mike Ledger Date: Fri, 17 Sep 2021 00:12:26 +1000 Subject: [PATCH] fix: websocket proxies not the same as http (#4893) --- .../vite/src/node/server/middlewares/proxy.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/node/server/middlewares/proxy.ts b/packages/vite/src/node/server/middlewares/proxy.ts index f23237d0c7852f..b8c653fdfb4eda 100644 --- a/packages/vite/src/node/server/middlewares/proxy.ts +++ b/packages/vite/src/node/server/middlewares/proxy.ts @@ -62,7 +62,7 @@ export function proxyMiddleware( httpServer.on('upgrade', (req, socket, head) => { const url = req.url! for (const context in proxies) { - if (url.startsWith(context)) { + if (doesProxyContextMatchUrl(context, url)) { const [proxy, opts] = proxies[context] if ( (opts.ws || opts.target?.toString().startsWith('ws:')) && @@ -71,7 +71,9 @@ export function proxyMiddleware( if (opts.rewrite) { req.url = opts.rewrite(url) } + debug(`${req.url} -> ws ${opts.target}`) proxy.ws(req, socket, head) + return } } } @@ -82,10 +84,7 @@ export function proxyMiddleware( return function viteProxyMiddleware(req, res, next) { const url = req.url! for (const context in proxies) { - if ( - (context.startsWith('^') && new RegExp(context).test(url)) || - url.startsWith(context) - ) { + if (doesProxyContextMatchUrl(context, url)) { const [proxy, opts] = proxies[context] const options: HttpProxy.ServerOptions = {} @@ -116,3 +115,10 @@ export function proxyMiddleware( next() } } + +function doesProxyContextMatchUrl(context: string, url: string): boolean { + return ( + (context.startsWith('^') && new RegExp(context).test(url)) || + url.startsWith(context) + ) +}