使用 .NET Core 2.1、C#、Kestrel。這將是一個奇怪的請求,但是:我有一個外部 URL 需要是 HTTPS 和一個內部 URL,它只是 HTTP。我想知道如何將端口 443 上的任何流量重定向到 HTTP 到 HTTPS(保持在同一個端口,443);目前它停留在 HTTP 上并死于可怕的死亡。(注意:端口 888 仍然是 HTTP,任何流向那里的流量都需要保持不安全的 HTTP。)我在 Program.cs 中這樣設置它:WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(options => { options.Listen(IPAddress.Any, 443, opts=> { opts.UseHttps("mycert.pfx"); }); options.Listen(IPAddress.Any, 888); }) .Build();在啟動時,我嘗試使用 Configure(IApplicationBuilder app...) app.UseHttpsRedirection();但這導致兩個端口上的所有流量都被重定向到 HTTPS,這對于 888 來說是個問題,因為它沒有 SSL 證書!有什么方法可以根據我指定的端口從 HTTP 重定向到 HTTPS 嗎?謝謝
1 回答

慕田峪4524236
TA貢獻1875條經驗 獲得超5個贊
默認情況下,中間件管道會運行,而不管使用什么端點來訪問您的應用程序。因此,如果您只是這樣做app.UseHttpsRedirection(),那么 HTTPS 重定向中間件將為您的所有公共端點運行。
當僅在特定條件下添加中間件時,有一種機制UseWhen允許您設置條件中間件管道。這看起來像這樣:
app.UseWhen(context => context.Request.Port == 888, httpApp =>
{
httpApp.UseHttpsRedirection();
});
但是,在您的情況下,這無濟于事:問題是在單個端口上,您只能托管一個東西。因此,如果您想在端口 443 上使用 HTTPS 托管您的應用程序,那么它將只接受 HTTPS。如果您嘗試使用不安全的 HTTP 進行連接,那么它將失敗,因為它無法執行必要的握手。
你想在這里做的是在同一個端口上同時托管 HTTP 和 HTTPS,但這根本行不通,因為沒有一種機制可以在客戶端實際已經嘗試建立之前確定客戶端是否想要執行 HTTP 或 HTTPS任何一個。
所以不,您不能將端口 443 上的 HTTP 重定向到端口 443 上的 HTTPS。
- 1 回答
- 0 關注
- 136 瀏覽
添加回答
舉報
0/150
提交
取消