在 Glitch 上部署 Node.js 應用時,Glitch 會在你的專案前面加上一層反向代理(reverse proxy),這層代理會自動處理 HTTPS(SSL/TLS)連線的終止。
也就是說,外部訪客連到你的 https://xxx.glitch.me 時,實際的 HTTPS 連線是在 Glitch 的代理伺服器上終止,然後再以 HTTP 傳送到你專案內部的 Node.js 應用。
你的 Node.js 程式實際上只會收到「未加密」的 HTTP 請求。
你無法直接在 Node.js 內部檢查 req.socket.encrypted 或 req.secure 來判斷是否為 HTTPS,因為這些屬性在 Glitch 的環境下都會是 undefined 或 false。
如果你需要在應用程式中判斷「外部」訪客是用 HTTPS 還是 HTTP 連線過來,建議做法如下:
啟用 Express 的 trust proxy 設定,這樣 Express 會根據 X-Forwarded-Proto 標頭來判斷原始請求協議。
const express = require('express');
const app = express();
// 告訴 Express 信任 proxy headers
app.set('trust proxy', true);
app.use((req, res, next) => {
if (req.secure) {
console.log('這是 HTTPS 請求');
} else {
console.log('這是 HTTP 請求');
}
next();
});
req.secure 會自動根據 X-Forwarded-Proto 是否為 https 來判斷。
在 Glitch 上,所有外部流量都會被強制導向 HTTPS,因此一般情況下,訪客都是透過 HTTPS 連線到你的網站。
你不需要也無法在 Glitch 上自行管理 SSL 憑證或直接建立 HTTPS 伺服器。
在 Glitch.com 上,你應該:
設定 app.set('trust proxy', true);
使用 req.secure 或 req.protocol 來判斷原始請求是否為 HTTPS。
這是最符合 Glitch 架構的做法,也是 Express 官方推薦的方式。
AI 揭露:
以上回答由 Perplexity 研究和對話搜尋引擎提供, Prompt=(把樓主整句問題餵進去)
回覆僅做排版編輯, 未做內容人工審查, 請自行判斷引用風險:
https://www.perplexity.ai/search/wo-xian-zai-shi-yong-glitch-co-HnB.6fxURz2nEIRCmeFQGg