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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare Azure Cosmos DB con i vettori
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Creare un webhook in Azure DevOps
Creare una libreria CSS universale: Clip-path
Introduzione ai web component HTML
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Configurare e gestire sidecar container in Azure App Service
Applicare un filtro per recuperare alcune issue di GitHub
Utilizzare gRPC su App Service di Azure
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Proteggere le risorse Azure con private link e private endpoints