Abilitare HTTP/3 in ASP.NET Core 7.0

di Marco De Sanctis, in ASP.NET Core,

HTTP/3 è la nuova versione del protocollo alla base del World Wide Web, basato sul nuovo transport protocol chiamato QUIC, e permette di velocizzare l'handshake delle richieste grazie all'uso di UDP invece che TCP.

Sebbene non sia ancora ufficialmente approvato - è ancora nello stato di proposed standard - è già supportato da un gran numero di browser, a iniziare da quelli basati su Chromium (Chrome, Edge, Opera), proseguendo con Firefox, fino a Safari, sebbene per quest'ultimo sia disabilitato per default.

Con ASP.NET Core 7.0 possiamo attivare HTTP/3 su Kestrel tramite le opzioni:

builder.WebHost.ConfigureKestrel((context, options) =>
{
    options.ListenAnyIP(5001, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
        listenOptions.UseHttps();
    });
});

Come possiamo testare che questo protocollo sia effettivamente attivo? Come prima cosa possiamo creare un endpoint che ci restituisca il protocollo utilizzato per la connessione:

app.MapGet("/protocol", (HttpContext context) =>
{
    return context.Request.Protocol;
});

Se a questo punto visitassimo questo URL con un browser, vedremmo solo "HTTP/2" come risposta. La ragione è che i browser non supportano HTTP/3 con i certificati self-signed, come è il caso di Kestrel quando è in esecuzione nel nostro ambiente di sviluppo.

Tuttavia, possiamo "forzare" l'utilizzo di HTTP/3 nel nostro ambiente di test utilizzando una chiamata HttpClient da una Console Application:

using System.Net;

System.AppContext.SetSwitch("System.Net.SocketsHttpHandler.Http3Support", true);

var client = new HttpClient();
client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrHigher;
client.DefaultRequestVersion = HttpVersion.Version30;

Console.WriteLine(await client.GetStringAsync("https://localhost:5001/protocol"));

Eseguendo la nostra applicazione, vedremo finalmente il risultato che ci aspettiamo:

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi