iT邦幫忙

1

HTTP請求headers要怎麼知道是否有用https(SSL/TLS)?

  • 分享至 

  • xImage

我現在使用glitch.com架node.js動態網站 但是我希望我可以檢測請求是否有用加密的https(SSL/TLS)

mathewkl iT邦高手 1 級 ‧ 2025-06-27 07:44:17 檢舉
恩..只允許443連入?
我嘗試過 它直接不開放我連線(glitch.com要我用app.listen(process.env.PORT)
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
Ray
iT邦大神 1 級 ‧ 2025-06-27 07:52:36
最佳解答

在 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?

如果你需要在應用程式中判斷「外部」訪客是用 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

非常感謝你!

我要發表回答

立即登入回答