为我的 ASP.NET Core Razor Pages 应用程序创建的默认启动代码包括以下代码:
app.UseHttpsRedirection();
这似乎是碰运气的。现在,在我的开发计算机上,编辑地址栏中的 URL 以使用 HTTP 而不是 HTTPS 会出现“连接已重置”错误。 另外,我找到了
AddRedirectToHttpsPermanent()
选项,可以将其传递给
app.UseRewriter()
。此时,我不清楚为什么 app.UseHttpsRedirection()
似乎不起作用,或者我是否应该使用
UseRewriter()
。有人想通了吗?
HTTP
和
HTTPS
使用不同的端口。仅从 url 中删除 s
:
https://localhost:44336
,您正尝试对需要 HTTP
的应用程序端口执行 HTTPS
,但该端口不受支持。要使重定向生效,您需要使用 HTTP
联系 HTTP
端口。使用指定的 HTTP
url,
http://localhost:53640
,您将看到应用程序按预期重定向。在我的示例中,请参阅launchSettings.json
,它的定义如下:
"applicationUrl": "http://localhost:53640"
所以这里发生的事情如下:一般情况
OSI 第 7 级定义的。
UseHttpsRedirection
当浏览器中的 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:80http://example.org:80 并且 https://example.org 将翻译为 https://example.org:443 因此,这将神奇地开箱即用:
将重定向到文件:VS 中的文件:https://example.org:443 浏览器只是不显示端口号。 找到
launchSettings.json
app.Use...
基本上都是注册中间件的扩展。顺序很重要。通常,首先配置重定向,然后配置 MVC。像这样:
app.UseHttpsRedirection();
app.UseMvc();
app.UseOtherMiddleWare();
如果颠倒顺序,可能会在管道中较早遇到错误,并且不会执行重定向。
您应该验证所有 5 个,