无法使用HTTP进行开发,总是被重定向到HTTPS



我正在使用HTTPS配置测试我的 ASP.NET CORE MVC Web应用程序。为此,我穿上了启动。恳菲亚服务:

services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
options.HttpsPort = 443;
});

启动时。配置:

app.UseHttpsRedirection();

并按如下方式配置了红隼服务器:

public static void ConfigureKestrelServerOptions(this KestrelServerOptions options)
{
var configurationService = options.ApplicationServices.GetRequiredService<IConfiguration>();
var environmentService = options.ApplicationServices.GetRequiredService<IHostingEnvironment>();
var endpoints = configurationService.GetSection("HttpServer:Endpoints")
.GetChildren()
.ToDictionary(section => section.Key, section =>
{
var endpoint = new EndPointSettings();
section.Bind(endpoint);
return endpoint;
});
foreach (var endpoint in endpoints)
{
var config = endpoint.Value;
var port = config.Port ?? (config.Scheme == "https" ? 443 : 8080);
var ipAddresses = new List<IPAddress>();
if (config.Host == "localhost")
{
ipAddresses.Add(IPAddress.IPv6Loopback);
ipAddresses.Add(IPAddress.Loopback);
}
else if (IPAddress.TryParse(config.Host, out var address))
{
ipAddresses.Add(address);
}
else
{
ipAddresses.Add(IPAddress.IPv6Any);
}
foreach (var address in ipAddresses)
{
options.Listen(address, port,
listenOptions =>
{
if (config.Scheme == "https")
{
var certificate = LoadCertificate(config, environmentService);
listenOptions.UseHttps(certificate);
}
});
}
}
}
WebHost.CreateDefaultBuilder(args)
.UseKestrel(options => options.ConfigureKestrelServerOptions())

之后,我在Chrome上添加了一个X509证书,所有https都运行良好。

问题是现在,我想用 http 协议进行调试,为此我认为注释上面的所有行应该就足够了,但是每次我尝试转到 URL "http://localhost:8080">时,它都会重定向到">https://localhost/Account/LogIn?返回网址=%2F"。

我试图删除Chrome的HSTS的本地主机和本地主机:8080;我试图在不同的端口中执行服务器,但没有运气。

有什么帮助吗?谢谢。

在此配置中,您将强制所有HTTP请求重定向到HTTPS。如果您希望能够同时使用这两种配置,那么使用此配置就足够了(在开发方法中可能就足够了(:

WebHost.CreateDefaultBuilder(args)
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000); 
options.Listen(IPAddress.Loopback, 5001, listenOptions => { listenOptions.UseHttps(); });
})
.UseStartup<Startup>();

如果我运行此配置,我显然能够访问这两个端点。

地址http://localhost:5000能够侦听所有HTTP请求。
地址https://localhost:5001能够侦听所有HTTPS请求。

但是,它需要在没有反向代理IIS的情况下运行Kestrel,因为它覆盖了当前配置中的设置端点。如果在 Visual Studio 中运行程序,则调试模式下的 Web 应用程序属性应在 Web 应用程序的配置文件名称上设置,并且"启动"应为">Project"类型。

即使使用上面注释的行也无法运行HTTP的问题可能是HSTS是高度可缓存的(根据Microsoft文档(。我怀疑浏览器,缓存中的某个地方保存了一些关于客户端和服务器之间的通信应该如何工作的信息。因此,它可能会导致重定向,甚至配置被设置。