Comment faire the.net HttpClient utilise http 2.0?

j'ai un asp.net api Web hébergée sur IIS 10 (Windows server 2016). Lorsque je fais une requête GET à partir D'un navigateur Microsoft Edge, je vois que HTTP 2.0 est utilisé dans les journaux 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

Toutefois, lorsqu'un GET demande est faite par le biais d'un .net de 4,6 client comme ci-dessous,

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));
    }
}

je vois la suite de HTTP 1.1 du journal dans les logs du serveur

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

How puis-je faire en sorte que le client .net utilise HTTP/2.0 ?

12
demandé sur tcb 2015-09-21 01:54:29

3 réponses

HttpClient ne supporte pas encore HTTP/2. Il sera disponible dans la prochaine version (nom de code KATANA). Voici le lien vers leur code source pour la prochaine version .

jusque là, vous pouviez implémenter votre propre objet HttpMessageHandler qui implémente HTTP/2 et le passer au constructeur du HttpClient (vous pouvez probablement utiliser leur code source de KATANA).

4
répondu Racil Hilan 2015-09-20 23:41:16

1.Assurez-vous que vous êtes sur le la dernière version de Windows 10 .

2.Installer WinHttpHandler :

Install-Package System.Net.Http.WinHttpHandler

3.Prolonger WinHttpHandler pour ajouter http2.0 support:

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.Passer au-dessus de gestionnaire à l' HttpClient constructeur

using (var httpClient = new HttpClient(new Http2CustomHandler()))
{
      // your custom code
}
11
répondu Shawinder Sekhon 2017-03-29 19:00:32

HTTP/2 ressemble à ce qu'il sera pris en charge dans les appels de c # client avec .NET 4.6.2

https://msdn.microsoft.com/en-us/library/ms171868 (v=V110).aspx

HTTP/2 Support (Windows 10)

HTTP/2 est une nouvelle version du protocole HTTP qui fournit beaucoup mieux utilisation de la connexion (moins de déplacements entre le client et le serveur), entraînant une baisse de la chargement de page Web de latence pour les utilisateurs. Les pages Web (comme contrairement aux services) bénéficient le plus de HTTP / 2, puisque le protocole optimise pour les multiples artefacts demandés dans le cadre d'un expérience. Le support HTTP/2 a été ajouté à ASP.NET dans le .NET Cadre 4.6. Parce que la fonctionnalité de réseau existe à plusieurs les couches, de nouvelles fonctionnalités ont été nécessaires dans Windows, dans IIS, et dans ASP.NET pour activer HTTP / 2. Vous devez être sous Windows 10 pour utiliser HTTP/2 avec ASP.NET.

HTTP / 2 est également pris en charge et on par défaut pour Windows 10 Universal Les applications Windows Platform (UWP) qui utilisent le système.Net.Http.HttpClient API.

2
répondu Oliver 2016-07-19 14:56:31