#c# #asp.net #http #http2 #http.sys
Вопрос:
Представьте, что у меня есть две службы в одном домене : https://example.com:5001 и https://example.com:5002
https://example.com:5001 имеет http.sys такие настройки
.UseHttpSys(options =>
{
options.Authentication.Schemes =
AuthenticationSchemes.NTLM |
AuthenticationSchemes.Negotiate;
options.Authentication.AllowAnonymous = false;
options.UrlPrefixes.Add("https://example.com:5001");
});
И https://example.com:5002 есть ли у этого варианта:
.UseHttpSys(options =>
{
options.AllowSynchronousIO = false;
options.EnableResponseCaching = false;
options.UrlPrefixes.Add("https://example.com:5002");
})
Когда я отправляю запрос в первую службу, я получаю разные проблемы:
- Через HttpClient -> WinHttpHandler>:
var handler = new WinHttpHandler()
{
SslProtocols = SslProtocols.Tls12,
ServerCredentials = CredentialCache.DefaultCredentials
};
var httpClient = new HttpClient(handler)
{
DefaultRequestVersion = HttpVersion.Version20,
};
var response = httpClient.GetAsync("https://example.com:5001").Resu<
Ответ имеет код состояния 200, но версия протокола понижена до 1.1
- Через HttpClient -> HttpClientHandler>:
var handler = new HttpClientHandler()
{
SslProtocols = SslProtocols.Tls12,
Credentials = CredentialCache.DefaultCredentials
};
var httpClient = new HttpClient(handler)
{
DefaultRequestVersion = HttpVersion.Version20,
};
var response = httpClient.GetAsync("https://example.com:5001").Resu<
Ответ имеет код состояния 401, Несанкционированный и версию протокола 2.0
- Через HttpWebRequest:
var webRequest = (HttpWebRequest)WebRequest.Create("https://example.com:5001");
webRequest.Credentials = CredentialCache.DefaultCredentials;
webRequest.Method = WebRequestMethods.Http.Get;
webRequest.ProtocolVersion = HttpVersion.Version20;
Создает исключение : В настоящее время поддерживаются только запросы версий HTTP/1.0 и HTTP/1.1. (Параметр «значение»)
Все же просит, чтобы https://example.com:5002 имеют код статуса 200 и версию протокола HTTP/2
Я полагаю, что аутентификация не работает должным образом с HTTP/2 в http.sys, или я делаю что-то не так.
Есть идеи, как это может работать правильно? Заранее благодарю вас!
Ответ №1:
Я обнаружил, что http/2 не поддерживает проверку подлинности Windows. Более подробная информация здесь: https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/http2-on-iis#when-is-http2-not-supported