Не может развиваться с HTTP, всегда перенаправляется на HTTPS - PullRequest
0 голосов
/ 20 октября 2018

Я тестировал свое веб-приложение ASP.NET CORE MVC с конфигурацией HTTPS.Для этого я включаю при запуске. ConfiguraServices:

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

при запуске. Настройте:

app.UseHttpsRedirection();

и настроил сервер Kestrel следующим образом:

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())

После этого я добавил сертификат X509 в Chrome, и все https работали нормально.

Проблема в том, что теперь я хочу отладить протокол http, и для этого я предполагал, что комментирую все строки вышедолжно быть достаточно, но каждый раз, когда я пытаюсь перейти на URL " http : // localhost: 8080" , он перенаправляет на " https : //localhost/Account/LogIn?ReturnUrl=%2F".

Я пытался удалить HSTS в Chrome для localhost и localhost: 8080;Я попытался запустить сервер в другой порт без удачи.

Любая помощь?Спасибо.

1 Ответ

0 голосов
/ 20 октября 2018

В этой конфигурации вы заставляете все 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-запросы.

Однако его необходимо запуститьKestrel без обратного прокси IIS, поскольку он переопределяет установленные конечные точки в текущей конфигурации.Если вы запускаете программу в Visual Studio, свойства WebApplication в режиме отладки должны быть установлены на Profile имя вашего веб-приложения и Launch должно иметь тип Project.

Проблема, из-за которой вы не можете запустить HTTP даже с указанными выше строками, может заключаться в том, что HSTS обладает высокой степенью кэширования (согласно документам Microsoft) .Я подозреваю браузер, что где-то в кеше хранится некоторая информация о том, как должна работать связь между клиентом и сервером.Так что это может вызвать перенаправление, даже если конфигурация отключена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...