From 104636b8ac780590186917d6c5a8d7ff49ba7ccc Mon Sep 17 00:00:00 2001 From: Bogdan Chadkin Date: Thu, 7 Nov 2024 23:29:31 +0400 Subject: [PATCH] fix: detect https protocol in development We use https for development at Webstudio. While setup we found somes requests always have "http" protocl. Turns out origin is not sent with get requests and node-adapter falls back into "http". Here added https detection based on express internals. --- packages/remix-dev/vite/node-adapter.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/remix-dev/vite/node-adapter.ts b/packages/remix-dev/vite/node-adapter.ts index 40310607b0b..5e639302800 100644 --- a/packages/remix-dev/vite/node-adapter.ts +++ b/packages/remix-dev/vite/node-adapter.ts @@ -1,4 +1,5 @@ import type { IncomingHttpHeaders, ServerResponse } from "node:http"; +import { TLSSocket } from "node:tls"; import { once } from "node:events"; import { Readable } from "node:stream"; import { splitCookiesString } from "set-cookie-parser"; @@ -35,10 +36,14 @@ export function fromNodeRequest( nodeReq: Vite.Connect.IncomingMessage, nodeRes: ServerResponse ): Request { + const protocol = + nodeReq.socket instanceof TLSSocket && nodeReq.socket.encrypted + ? "https" + : "http"; let origin = nodeReq.headers.origin && "null" !== nodeReq.headers.origin ? nodeReq.headers.origin - : `http://${nodeReq.headers.host}`; + : `${protocol}://${nodeReq.headers.host}`; // Use `req.originalUrl` so Remix is aware of the full path invariant( nodeReq.originalUrl,