diff --git a/lib/server.js b/lib/server.js index 46841dda..14867084 100644 --- a/lib/server.js +++ b/lib/server.js @@ -367,7 +367,8 @@ class Server { const host = metautil.parseHost(transport.req.headers.host); const { protocol, ports } = this.options; const targetPort = metautil.sample(ports); - transport.redirect(`${protocol}://${host}:${targetPort}/`); + const targetUrl = transport.req.url || '/'; + transport.redirect(`${protocol}://${host}:${targetPort}${targetUrl}`); } closeClients() { diff --git a/lib/transport.js b/lib/transport.js index 0010b6b3..012d7bfd 100644 --- a/lib/transport.js +++ b/lib/transport.js @@ -161,9 +161,10 @@ class HttpTransport extends Transport { } redirect(location) { - const { res } = this; + const { res, req } = this; if (res.headersSent) return; - res.writeHead(302, { Location: location, ...HEADERS }); + const code = ['GET', 'HEAD'].includes(req.method) ? 302 : 307; + res.writeHead(code, { Location: location, ...HEADERS }); res.end(); }