UseHttpsRedirection 工作不可靠?

问题描述 投票:0回答:2

为我的 ASP.NET Core Razor Pages 应用程序创建的默认启动代码包括以下代码:

app.UseHttpsRedirection();

这似乎是碰运气的。现在,在我的开发计算机上,编辑地址栏中的 URL 以使用 HTTP 而不是 HTTPS 会出现“连接已重置”错误。 另外,我找到了

AddRedirectToHttpsPermanent()

选项,可以将其传递给

app.UseRewriter()
此时,我不清楚为什么 

app.UseHttpsRedirection()

似乎不起作用,或者我是否应该使用

UseRewriter()
有人想通了吗?

c# asp.net asp.net-core razor-pages
2个回答
10
投票

重定向按预期工作。

HTTP

HTTPS
使用不同的端口。
仅从 url 中删除 

s

https://localhost:44336
,您正尝试对需要
HTTP
的应用程序端口执行
HTTPS
,但该端口不受支持。要使重定向生效,您需要使用
HTTP
联系
HTTP
端口。
使用指定的 

HTTP

url,

http://localhost:53640
,您将看到应用程序按预期重定向。
在我的示例中,请参阅

launchSettings.json

,它的定义如下:

"applicationUrl": "http://localhost:53640"

所以这里发生的事情如下:

一般情况

“HTTPS 端口”
    *
  • ,仅接受 HTTPS(因此不接受 HTTP)连接。 “HTTP 端口”
  • *
  • ,仅接受 HTTP(因此不接受 HTTPS)连接。
* 在物理世界中,不存在 HTTPS 或 HTTP 端口之类的东西,因为它是在

OSI 第 7 级定义的。 UseHttpsRedirection

,将 HTTP 端口上的入站 HTTP 流量路由到 HTTPS 端口上的 HTTPS 流量。

当浏览器中的 URL 未指定端口号时,它默认为协议通常使用的端口。 HTTP 端口为 80,HTTPS 端口为 443。

调试器案例

为了防止端口冲突,Visual Studio 默认使用非标准端口进行调试。您可以在“launchSettings.json”文件中看到它们。

我的看起来像这样:

"iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:53640", "sslPort": 44336 } },

记下 2 个端口号。重定向仅适用于(和前往)指定端口。
HTTP 在 53640 被接受,HTTPS 在 44336 被接受。

您的用例

通过更改删除 URL 栏中的

s

,您将更改:

https://localhost:44336

http://localhost:44336

注意,由于您没有调整端口,因此您尝试在 HTTPS 端口上使用 HTTP 连接。这种情况不属于重定向范围,

将会失败。

只有http://localhost:53640

会重定向到

https://localhost:44336

。仅 HTTP:
http://localhost:44336
 将导致连接重置。
生产服务器案例

在正常情况下,您可以使用默认端口(HTTP 为 80,HTTPS 为 443,带有适当的证书)将应用程序发布到 Web 服务器。

由于用户使用的浏览器也使用这些默认端口,因此重定向效果很好,因为:

http://example.org
实际上会翻译为

http://example.org:80 并且 https://example.org 将翻译为 https://example.org:443 因此,这将神奇地开箱即用:

http://example.org:80
将重定向到

https://example.org:443 浏览器只是不显示端口号。 找到

launchSettings.json
文件:VS 中的文件:

enter image description here 或者


如果这没有帮助,可能是

app.Use...

的顺序错误。

基本上都是注册中间件的扩展。顺序很重要。

通常,首先配置重定向,然后配置 MVC。像这样:

app.UseHttpsRedirection(); app.UseMvc(); app.UseOtherMiddleWare();

如果颠倒顺序,可能会在管道中较早遇到错误,并且不会执行重定向。
    

您应该验证所有 5 个,

0
投票

enter image description here详细快速视频在这里

© www.soinside.com 2019 - 2024. All rights reserved.