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
Referenziare un @layer più alto in CSS
Recuperare l'ultima versione di una release di GitHub
Gestire i dati con Azure Cosmos DB Data Explorer
.NET Conference Italia 2024
Estrarre dati randomici da una lista di oggetti in C#
Recuperare App Service cancellati su Azure
Utilizzare QuickGrid di Blazor con Entity Framework
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Il nuovo controllo Range di Blazor 9
Eliminare una project wiki di Azure DevOps
Rendere le variabili read-only in una pipeline di Azure DevOps
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
I più letti di oggi
- Formati per l'impostazione del colore in CSS3
- Eseguire una chiamata AJAX per inviare dati al server in Angular 2
- Impostare un riferimento ad una entity collegata tramite foreign key
- la Call For Papert per #netconfit è aperta!invia la tua sessione da https://aspit.co/netconfit-20 puoi parlare di #net5, #aspnet5, #efcore5, #CSharp9 e tutto quello che ruota intorno a #dotnet.