Megosztás a következőn keresztül:


HTTP/3 használata a HttpClient használatával

A HTTP/3 a HTTP harmadik, nemrég szabványosított főverziója. A HTTP/3 ugyanazt a szemantikát használja, mint a HTTP/1.1 és a HTTP/2: az összes verzióra ugyanazok a kérési módszerek, állapotkódok és üzenetmezők vonatkoznak. A különbségek a mögöttes átvitelben vannak. A HTTP/1.1 és a HTTP/2 egyaránt a TCP-t használja átvitelként. A HTTP/3 a HTTP/3 mellett kifejlesztett szállítási technológiát, a QUIC-t használja.

A HTTP/3 és a QUIC is számos előnnyel rendelkezik a HTTP/1.1 és a HTTP/2-hez képest:

  • Gyorsabb válaszidő az első kéréshez. A QUIC és a HTTP/3 kevesebb, az ügyfél és a kiszolgáló közötti körút során egyezteti a kapcsolatot. Az első kérés gyorsabban éri el a kiszolgálót.
  • Továbbfejlesztett felhasználói élmény a kapcsolatcsomagok elvesztése esetén. A HTTP/2 több kérést is multiplexel egy TCP-kapcsolaton keresztül. A kapcsolat csomagvesztése minden kérésre hatással van. Ezt a problémát "sorfedő blokkolásnak" nevezzük. Mivel a QUIC natív multiplexálást biztosít, az elveszett csomagok csak azokat a kéréseket érintik, amelyekben az adatok elvesztek.
  • Támogatja a hálózatok közötti váltást. Ez a funkció olyan mobileszközök esetében hasznos, ahol gyakran váltanak a WIFI és a mobilhálózatok között, amikor a mobileszköz helyének megváltozik. A HTTP/1.1 és a HTTP/2 kapcsolatok jelenleg hiba miatt meghiúsulnak a hálózatok közötti váltáskor. Egy alkalmazásnak vagy webböngészőnek újra meg kell próbálkoznia a sikertelen HTTP-kérésekkel. A HTTP/3 lehetővé teszi, hogy az alkalmazás vagy a webböngésző zökkenőmentesen folytassa a hálózatot. HttpClient és a Kestrel nem támogatja a hálózati átmeneteket a .NET 7-ben. Lehetséges, hogy egy későbbi kiadásban lesz elérhető.

Fontos

A HTTP/3 előnyeinek kihasználására konfigurált alkalmazásokat úgy kell megtervezni, hogy a HTTP/1.1 és a HTTP/2 is támogatott legyen. Ha a HTTP/3-ban problémákat talál, javasoljuk, hogy tiltsa le a HTTP/3-at, amíg a .NET egy későbbi kiadásában meg nem oldja a problémákat.

HttpClient-beállítások

A HTTP-verzió a 3.0-s beállítással HttpRequestMessage.Version konfigurálható. Mivel azonban nem minden útválasztó, tűzfal és proxy támogatja megfelelően a HTTP/3-at, javasoljuk a HTTP/3 http/1.1 és HTTP/2 együttes konfigurálását. Ebben HttpClienta szakaszban a következő megadásával lehet elvégezni:

Platformfüggőségek

A HTTP/3 a QUIC-t használja átviteli protokollként. A HTTP/3 .NET-implementációja az MsQuic használatával biztosítja a QUIC-funkciókat. Ennek eredményeképpen a HTTP/3 .NET-támogatása az MsQuic platform követelményeitől függ. Az MsQuic telepítéséről további információt a QUIC Platform függőségei című témakörben talál. Ha a HttpClient által futtatott platform nem rendelkezik a HTTP/3 összes követelményével, akkor le van tiltva.

HttpClient használata

Az alábbi példakód legfelső szintű utasításokat használ, és bemutatja, hogyan adhatja meg a HTTP3-at a kérelemben:

// See https://aka.ms/new-console-template for more information
using System.Net;

using var client = new HttpClient
{
    DefaultRequestVersion =  HttpVersion.Version30,
    DefaultVersionPolicy = HttpVersionPolicy.RequestVersionExact
};

Console.WriteLine("--- localhost:5001 ---");

HttpResponseMessage resp = await client.GetAsync("https://localhost:5001/");
string body = await resp.Content.ReadAsStringAsync();

Console.WriteLine(
    $"status: {resp.StatusCode}, version: {resp.Version}, " +
    $"body: {body.Substring(0, Math.Min(100, body.Length))}");

HTTP/3 támogatás a .NET 6-ban

A .NET 6-ban a HTTP/3 előzetes verziójú funkcióként érhető el, mert a HTTP/3 specifikáció még nem véglegesítve lett. Viselkedési vagy teljesítményproblémák lehetnek a HTTP/3-ban a .NET 6-tal. Az előzetes verziójú funkciókkal kapcsolatos további információkért tekintse meg az előzetes verziójú funkciók specifikációját.

Ha engedélyezni szeretné a HTTP/3-támogatást a .NET 6-ban, adja meg a RuntimeHostConfigurationOption csomópontot a projektfájlban a HTTP/3 engedélyezéséhez a következővel HttpClient:

<ItemGroup>
    <RuntimeHostConfigurationOption Value="true"
        Include="System.Net.SocketsHttpHandler.Http3Support" />
</ItemGroup>

Másik lehetőségként meghívhatja System.AppContext.SetSwitch az alkalmazás kódját, vagy beállíthatja a DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP3SUPPORT környezeti változót true. További információ: .NET környezeti változók: DOTNET_SYSTEM_NET_HTTP_*.

A HTTP/3 konfigurációjelzőjének megkövetelésének oka, hogy a verziószabályzat RequestVersionOrHigherhasználata esetén az alkalmazásoknak védelmet kell nyújtaniuk a jövőbeli törésekkel szemben. Ha http/1.1 és HTTP/2 protokollt használó kiszolgálót hív meg, ha a kiszolgáló később HTTP/3-ra frissül, az ügyfél MEGPRÓBÁL HTTP/3-at használni, és valószínűleg nem kompatibilis, mivel a szabvány nem végleges, ezért a .NET 6 kiadása után változhat.

A .NET 6 csak a libmsquic 1.9.x verzióival kompatibilis. A Libmsquic 2.x nem kompatibilis a .NET 6-tal a kódtár kompatibilitástörő változásai miatt. A Libmsquic szükség esetén megkapja az 1.9.x frissítéseit a biztonsági javítások beépítéséhez.

HTTP/3 kiszolgáló

A HTTP/3-at ASP.NET támogatja a Kestrel-kiszolgáló a .NET 6-ban (előzetes verzióban) és a .NET 7-ben (teljes mértékben támogatott). További információ: HTTP/3 használata a ASP.NET Core Kestrel webkiszolgálóval.

Nyilvános tesztkiszolgálók

A Cloudflare http/3-webhelyet üzemeltet, amely az ügyfél https://cloudflare-quic.comteszteléséhez használható.

Lásd még