web-dev-qa-db-fra.com

Comment faire pour que le HttpClient .net utilise http 2.0?

J'ai une API web asp.net hébergée sur IIS 10 (serveur Windows 2016). Lorsque j'effectue une demande de 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

Cependant, lorsqu'une demande GET est effectuée via un . Net 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 ce qui suit HTTP 1.1 connectez-vous aux journaux 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

Comment faire pour que le client .net utilise HTTP/2.0?

16
tcb

HttpClient ne prend pas encore en charge 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 pouvez implémenter votre propre objet HttpMessageHandler qui implémente HTTP/2 et le transmettre au constructeur de HttpClient (vous pouvez probablement utiliser leur code source de KATANA).

6
Racil Hilan

1.Assurez-vous que vous utilisez la version la plus récente de Windows 1.

2.Installez WinHttpHandler:

Install-Package System.Net.Http.WinHttpHandler

3.Extend WinHttpHandler pour ajouter http2. 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.Passez le gestionnaire ci-dessus au constructeur HttpClient

using (var httpClient = new HttpClient(new Http2CustomHandler()))
{
      // your custom code
}
23
Shawinder Sekhon

HTTP/2 semble être pris en charge dans les appels client C # avec .NET 4.6.2

https://msdn.Microsoft.com/en-us/library/ms171868 (v = vs.110) .aspx

Prise en charge HTTP/2 (Windows 10)

HTTP/2 est une nouvelle version du protocole HTTP qui offre une bien meilleure utilisation de la connexion (moins d'allers-retours entre le client et le serveur), ce qui réduit le temps de chargement des pages Web pour les utilisateurs. Les pages Web (par opposition aux services) bénéficient le plus de HTTP/2, car le protocole optimise pour plusieurs artefacts demandés dans le cadre d'une même expérience. La prise en charge HTTP/2 a été ajoutée à ASP.NET dans le .NET Framework 4.6. Étant donné que la fonctionnalité de mise en réseau existe sur plusieurs couches, de nouvelles fonctionnalités étaient requises dans Windows, dans IIS et dans ASP.NET pour activer HTTP/2. Vous devez exécuter Windows 10 pour utiliser HTTP/2 avec ASP.NET.

HTTP/2 est également pris en charge et activé par défaut pour les applications Windows 10 Universal Windows Platform (UWP) qui utilisent l'API System.Net.Http.HttpClient.

3
Oliver