Как сделать the.net HttpClient использовать http 2.0?
у меня есть asp.net веб-api, размещенный в IIS 10 (windows server 2016). Когда я делаю GET
запрос на это из браузера Microsoft Edge, я вижу, что HTTP 2.0
используется в журналах IIS
2015-09-20 21:57:59 100.76.48.17 GET /RestController/Native - 443 - 73.181.195.76 HTTP/2.0 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/42.0.2311.135+Safari/537.36+Edge/12.10240 - 200 0 0 7299
, когда GET
запрос сделан через клиент .net 4.6 ниже
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://myapp.cloudapp.net/");
HttpResponseMessage response = await client.GetAsync("RestController/Native");
if (response.IsSuccessStatusCode)
{
await response.Content.CopyToAsync(new MemoryStream(buffer));
}
}
Я вижу следующие HTTP 1.1
войдите в логи сервера
2015-09-20 20:57:41 100.76.48.17 GET /RestController/Native - 443 - 131.107.160.196 HTTP/1.1 - - 200 0 0 707
как я могу заставить клиент .net использовать HTTP / 2.0 ?
3 ответов
HttpClient
еще не поддерживает HTTP/2. Он будет доступен в следующем выпуске (кодовое название KATANA). Вот это ссылка на их исходный код для следующей версии.
до тех пор, вы могли бы реализовать свой собственный HttpMessageHandler
объект, реализующий HTTP / 2 и передающий его в HttpClient
конструктор (вы, вероятно, можете использовать их исходный код из KATANA).
1.Убедитесь, что вы находитесь на последний версия Windows 10.
2.Установить WinHttpHandler:
Install-Package System.Net.Http.WinHttpHandler
3.Продлить WinHttpHandler добавить http2 по.0 поддержка:
public class Http2CustomHandler : WinHttpHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
request.Version = new Version("2.0");
return base.SendAsync(request, cancellationToken);
}
}
4.Передайте выше обработчика С помощью HttpClient конструктор
using (var httpClient = new HttpClient(new Http2CustomHandler()))
{
// your custom code
}
HTTP / 2 похоже, что он будет поддерживаться в клиентских вызовах C# с .NET 4.6.2
https://msdn.microsoft.com/en-us/library/ms171868 (v=против 110).aspx
поддержка HTTP / 2 (Windows 10)
HTTP / 2-это новая версия протокола HTTP, которая обеспечивает гораздо лучшее использование соединения (меньше круговых переходов между клиентом и сервером), в результате загрузка веб-страницы с меньшей задержкой для пользователей. Веб-страниц (как в отличие от сервисов) больше всего выигрывают от HTTP / 2, так как протокол оптимизирует для нескольких артефактов, запрашиваемых как часть одного опыт. Добавлена поддержка HTTP / 2 ASP.NET в .NET Основы 4.6. Поскольку сетевые функции существуют в нескольких слои, новые функции были необходимы в Windows, IIS и в ASP.NET чтобы включить HTTP/2. Вы должны работать в Windows 10, чтобы использовать HTTP / 2 с ASP.NET.
HTTP / 2 также поддерживается и включен по умолчанию для Windows 10 универсальный Платформы Windows (UWP) в приложениях, использующих систему.Чистая.Протоколу HTTP.С помощью HttpClient ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС.