diff --git a/src/node/app/proxy.ts b/src/node/app/proxy.ts index e069d2e60..7b79d96f6 100644 --- a/src/node/app/proxy.ts +++ b/src/node/app/proxy.ts @@ -61,7 +61,9 @@ export class ProxyHttpProvider extends HttpProvider implements HttpProxyProvider current = domain } }) - return current || host + // Setting the domain to localhost doesn't seem to work for subdomains (for + // example dev.localhost). + return current && current !== "localhost" ? current : host } public maybeProxyRequest( @@ -90,12 +92,11 @@ export class ProxyHttpProvider extends HttpProvider implements HttpProxyProvider return undefined } - // At minimum there needs to be sub.domain.tld. - const host = request.headers.host - const parts = host && host.split(".") - if (!parts || parts.length < 3) { - return undefined - } + // Split into parts. + const host = request.headers.host || "" + const idx = host.indexOf(":") + const domain = idx !== -1 ? host.substring(0, idx) : host + const parts = domain.split(".") // There must be an exact match. const port = parts.shift() diff --git a/src/node/http.ts b/src/node/http.ts index 5b62eef6a..525033080 100644 --- a/src/node/http.ts +++ b/src/node/http.ts @@ -581,6 +581,9 @@ export class HttpServer { this.heart.beat() const route = this.parseUrl(request) const write = (payload: HttpResponse): void => { + const host = request.headers.host || "" + const idx = host.indexOf(":") + const domain = idx !== -1 ? host.substring(0, idx) : host response.writeHead(payload.redirect ? HttpCode.Redirect : payload.code || HttpCode.Ok, { "Content-Type": payload.mime || getMediaMime(payload.filePath), ...(payload.redirect ? { Location: this.constructRedirect(request, route, payload as RedirectResponse) } : {}), @@ -591,9 +594,7 @@ export class HttpServer { "Set-Cookie": [ `${payload.cookie.key}=${payload.cookie.value}`, `Path=${normalize(payload.cookie.path || "/", true)}`, - request.headers.host - ? `Domain=${(this.proxy && this.proxy.getCookieDomain(request.headers.host)) || request.headers.host}` - : undefined, + domain ? `Domain=${(this.proxy && this.proxy.getCookieDomain(domain)) || domain}` : undefined, // "HttpOnly", "SameSite=strict", ]