ASP.NET Core Kestrel web sunucusuyla HTTP/3 kullanma
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
HTTP/3 , onaylanmış bir standarttır ve HTTP'nin üçüncü ana sürümüdür. Bu makalede HTTP/3 gereksinimleri ele alınmaktadır. HTTP/3, ASP.NET Core 7.0 ve sonraki sürümlerde tam olarak desteklenir.
Önemli
HTTP/3'ün avantajlarından yararlanmak için yapılandırılan uygulamalar, HTTP/1.1 ve HTTP/2'yi de destekleyecek şekilde tasarlanmalıdır.
HTTP/3 gereksinimleri
HTTP/3 işletim sistemine bağlı olarak farklı gereksinimlere sahiptir. Üzerinde çalışan platformun Kestrel HTTP/3 için tüm gereksinimleri yoksa devre dışı bırakılır ve Kestrel diğer HTTP protokollerine geri döner.
Windows
- Windows 11 Derleme 22000 veya üzeri VEYA Windows Server 2022.
- TLS 1.3 veya üzeri bağlantı.
Linux
libmsquic
paketi yüklendi.
libmsquic
adresinde Microsoft'un resmi Linux paket deposu packages.microsoft.com
aracılığıyla yayımlanır. Bu paketi yüklemek için:
- Depoyu
packages.microsoft.com
ekleyin. Yönergeler için bkz . Microsoft Ürünleri için Linux Yazılım Deposu. - Distro'nun
libmsquic
paket yöneticisini kullanarak paketi yükleyin. Örneğin,apt install libmsquic=1.9*
Ubuntu'da.
Not: .NET 6 yalnızca libmsquic'in 1.9.x sürümleriyle uyumludur. Libmsquic 2.x, hataya neden olan değişiklikler nedeniyle uyumlu değil. Libmsquic, güvenlik düzeltmelerini eklemek için gerektiğinde 1.9.x güncelleştirmelerini alır.
macOS
HTTP/3 şu anda macOS'ta desteklenmemektedir ve gelecekteki bir sürümde kullanılabilir.
Başlarken
HTTP/3 varsayılan olarak etkin değildir. HTTP/3'i etkinleştirmek için öğesine Program.cs
yapılandırma ekleyin.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Yukarıdaki kod 5001 numaralı bağlantı noktasını şu şekilde yapılandırıyor:
- belirterek
HttpProtocols.Http1AndHttp2AndHttp3
HTTP/1.1 ve HTTP/2 ile birlikte HTTP/3 kullanın. - ile
UseHttps
HTTPS'yi etkinleştirin. HTTP/3 için HTTPS gerekir.
Tüm yönlendiriciler, güvenlik duvarları ve proxy'ler HTTP/3'i düzgün desteklemediğinden HTTP/3, HTTP/1.1 ve HTTP/2 ile birlikte yapılandırılmalıdır. Bu, uç noktanın desteklenen protokolleri olarak belirtilerek HttpProtocols.Http1AndHttp2AndHttp3
yapılabilir.
Daha fazla bilgi için bkz . ASP.NET Core Kestrel web sunucusu için uç noktaları yapılandırma.
Alt-svc
HTTP/3, üst bilgi aracılığıyla alt-svc
HTTP/1.1 veya HTTP/2'den yükseltme olarak bulunur. Bu, ilk isteğin HTTP/3'e geçmeden önce normalde HTTP/1.1 veya HTTP/2 kullanacağı anlamına gelir. Kestrel HTTP/3 etkinse üst bilgiyi otomatik olarak ekler alt-svc
.
Localhost testi
Tarayıcılar HTTP/3 üzerinde geliştirme sertifikası gibi otomatik olarak imzalanan sertifikalara Kestrel izin vermez.
HttpClient
.NET 6 veya sonraki sürümlerde localhost/geri döngü testi için kullanılabilir. HTTP/3 isteği yapmak için kullanılırkenHttpClient
ek yapılandırma gerekir:- 3.0 olarak ayarlayın
HttpRequestMessage.Version
veya HttpRequestMessage.VersionPolicy
seçeneğiniHttpVersionPolicy.RequestVersionOrHigher
olarak ayarlayın.
- 3.0 olarak ayarlayın
HTTP/3 avantajları
HTTP/3, HTTP/1.1 ve HTTP/2 ile aynı semantiği kullanır: tüm sürümler için aynı istek yöntemleri, durum kodları ve ileti alanları geçerlidir. Farklılıklar temel alınan taşımadadır. Hem HTTP/1.1 hem de HTTP/2, aktarımları olarak TCP kullanır. HTTP/3, HTTP/3 ile birlikte geliştirilen QUIC adlı yeni bir aktarım teknolojisi kullanır.
HTTP/3 ve QUIC'nin HTTP/1.1 ve HTTP/2 ile karşılaştırıldığında bir dizi avantajı vardır:
- İlk isteğin daha hızlı yanıt süresi. QUIC ve HTTP/3, istemci ile sunucu arasında daha az gidiş dönüşte bağlantı kurar. İlk istek sunucuya daha hızlı ulaşır.
- Bağlantı paketi kaybı olduğunda geliştirilmiş deneyim. HTTP/2, bir TCP bağlantısı aracılığıyla birden çok isteği birden çok kez katlar. Bağlantıdaki paket kaybı tüm istekleri etkiler. Bu soruna "satır başı engelleme" adı verilir. QUIC yerel çoğullama sağladığından, kayıp paketler yalnızca verilerin kaybolduğu istekleri etkiler.
- Ağlar arasında geçişi destekler. Bu özellik, bir mobil cihaz konum değiştirirken WIFI ile hücresel ağlar arasında geçiş yapmak yaygın olan mobil cihazlar için kullanışlıdır. Şu anda HTTP/1.1 ve HTTP/2 bağlantıları, ağlar arasında geçiş yaparken bir hatayla başarısız olur. Bir uygulama veya web tarayıcılarının başarısız http isteklerini yeniden denemesi gerekir. HTTP/3, bir ağ değiştiğinde uygulamanın veya web tarayıcısının sorunsuz bir şekilde devam etmesini sağlar. Kestrel .NET 8'de ağ geçişlerini desteklemez. Gelecek bir sürümde kullanılabilir.
HTTP/3 önerilen bir standarttır ve HTTP'nin üçüncü ana sürümüdür. Bu makalede HTTP/3 gereksinimleri ele alınmaktadır. HTTP/3, ASP.NET Core 7.0 ve sonraki sürümlerde tam olarak desteklenir.
Önemli
HTTP/3'ün avantajlarından yararlanmak için yapılandırılan uygulamalar, HTTP/1.1 ve HTTP/2'yi de destekleyecek şekilde tasarlanmalıdır.
HTTP/3 gereksinimleri
HTTP/3 işletim sistemine bağlı olarak farklı gereksinimlere sahiptir. Üzerinde çalışan platformun Kestrel HTTP/3 için tüm gereksinimleri yoksa devre dışı bırakılır ve Kestrel diğer HTTP protokollerine geri dönüşür.
Windows
- Windows 11 Derleme 22000 veya üzeri VEYA Windows Server 2022.
- TLS 1.3 veya üzeri bağlantı.
Linux
libmsquic
paketi yüklendi.
libmsquic
adresinde Microsoft'un resmi Linux paket deposu packages.microsoft.com
aracılığıyla yayımlanır. Bu paketi yüklemek için:
- Depoyu
packages.microsoft.com
ekleyin. Yönergeler için bkz . Microsoft Ürünleri için Linux Yazılım Deposu. - Distro'nun
libmsquic
paket yöneticisini kullanarak paketi yükleyin. Örneğin,apt install libmsquic=1.9*
Ubuntu'da.
Not: .NET 6 yalnızca libmsquic'in 1.9.x sürümleriyle uyumludur. Libmsquic 2.x, hataya neden olan değişiklikler nedeniyle uyumlu değil. Libmsquic, güvenlik düzeltmelerini eklemek için gerektiğinde 1.9.x güncelleştirmelerini alır.
macOS
HTTP/3 şu anda macOS'ta desteklenmemektedir ve gelecekteki bir sürümde kullanılabilir.
Başlarken
HTTP/3 varsayılan olarak etkin değildir. HTTP/3'i etkinleştirmek için öğesine Program.cs
yapılandırma ekleyin.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Yukarıdaki kod 5001 numaralı bağlantı noktasını şu şekilde yapılandırıyor:
- belirterek
HttpProtocols.Http1AndHttp2AndHttp3
HTTP/1.1 ve HTTP/2 ile birlikte HTTP/3 kullanın. - ile
UseHttps
HTTPS'yi etkinleştirin. HTTP/3 için HTTPS gerekir.
Tüm yönlendiriciler, güvenlik duvarları ve proxy'ler HTTP/3'i düzgün desteklemediğinden HTTP/3, HTTP/1.1 ve HTTP/2 ile birlikte yapılandırılmalıdır. Bu, uç noktanın desteklenen protokolleri olarak belirtilerek HttpProtocols.Http1AndHttp2AndHttp3
yapılabilir.
Daha fazla bilgi için bkz . ASP.NET Core Kestrel web sunucusu için uç noktaları yapılandırma.
Alt-svc
HTTP/3, üst bilgi aracılığıyla alt-svc
HTTP/1.1 veya HTTP/2'den yükseltme olarak bulunur. Bu, ilk isteğin HTTP/3'e geçmeden önce normalde HTTP/1.1 veya HTTP/2 kullanacağı anlamına gelir. Kestrel HTTP/3 etkinse üst bilgiyi otomatik olarak ekler alt-svc
.
Localhost testi
Tarayıcılar HTTP/3'te geliştirme sertifikası gibi otomatik olarak imzalanan sertifikalara Kestrel izin vermez.
HttpClient
.NET 6 veya sonraki sürümlerde localhost/geri döngü testi için kullanılabilir. HTTP/3 isteği yapmak için kullanılırkenHttpClient
ek yapılandırma gerekir:- 3.0 olarak ayarlayın
HttpRequestMessage.Version
veya HttpRequestMessage.VersionPolicy
seçeneğiniHttpVersionPolicy.RequestVersionOrHigher
olarak ayarlayın.
- 3.0 olarak ayarlayın
HTTP/3 avantajları
HTTP/3, HTTP/1.1 ve HTTP/2 ile aynı semantiği kullanır: tüm sürümler için aynı istek yöntemleri, durum kodları ve ileti alanları geçerlidir. Farklılıklar temel alınan taşımadadır. Hem HTTP/1.1 hem de HTTP/2, aktarımları olarak TCP kullanır. HTTP/3, HTTP/3 ile birlikte geliştirilen QUIC adlı yeni bir aktarım teknolojisi kullanır.
HTTP/3 ve QUIC'nin HTTP/1.1 ve HTTP/2 ile karşılaştırıldığında bir dizi avantajı vardır:
- İlk isteğin daha hızlı yanıt süresi. QUIC ve HTTP/3, istemci ile sunucu arasında daha az gidiş dönüşte bağlantı kurar. İlk istek sunucuya daha hızlı ulaşır.
- Bağlantı paketi kaybı olduğunda geliştirilmiş deneyim. HTTP/2, bir TCP bağlantısı aracılığıyla birden çok isteği birden çok kez katlar. Bağlantıdaki paket kaybı tüm istekleri etkiler. Bu soruna "satır başı engelleme" adı verilir. QUIC yerel çoğullama sağladığından, kayıp paketler yalnızca verilerin kaybolduğu istekleri etkiler.
- Ağlar arasında geçişi destekler. Bu özellik, bir mobil cihaz konum değiştirirken WIFI ile hücresel ağlar arasında geçiş yapmak yaygın olan mobil cihazlar için kullanışlıdır. Şu anda HTTP/1.1 ve HTTP/2 bağlantıları, ağlar arasında geçiş yaparken bir hatayla başarısız olur. Bir uygulama veya web tarayıcılarının başarısız http isteklerini yeniden denemesi gerekir. HTTP/3, bir ağ değiştiğinde uygulamanın veya web tarayıcısının sorunsuz bir şekilde devam etmesini sağlar. Kestrel .NET 6'da ağ geçişlerini desteklemez. Gelecek bir sürümde kullanılabilir.
HTTP/3 , HTTP'nin üçüncü ve yaklaşan ana sürümüdür. Bu makalede HTTP/3 gereksinimleri ve bunu kullanmak için nasıl yapılandırılacağı Kestrel açıklanır.
Önemli
HTTP/3, .NET 6'da önizleme özelliği olarak kullanılabilir. HTTP/3 belirtimi sonlandırılmamıştır ve .NET 6 ile HTTP/3'te davranış veya performans sorunları olabilir.
Önizleme özelliği desteği hakkında daha fazla bilgi için desteklenen önizleme özellikleri bölümüne bakın.
HTTP/3'ün avantajlarından yararlanmak için yapılandırılan uygulamalar, HTTP/1.1 ve HTTP/2'yi de destekleyecek şekilde tasarlanmalıdır. Sorunlar HTTP/3'te tanımlanırsa, sorunlar ASP.NET Core'un gelecekteki bir sürümünde çözülene kadar HTTP/3'ün devre dışı bırakılması önerilir. Duyurular GitHub deposunda önemli sorunlar bildirilir.
HTTP/3 gereksinimleri
HTTP/3 işletim sistemine bağlı olarak farklı gereksinimlere sahiptir. Üzerinde çalışan platformun Kestrel HTTP/3 için tüm gereksinimleri yoksa devre dışı bırakılır ve Kestrel diğer HTTP protokollerine geri dönüşür.
Windows
- Windows 11 Derleme 22000 veya üzeri VEYA Windows Server 2022.
- TLS 1.3 veya üzeri bağlantı.
Linux
libmsquic
paketi yüklendi.
libmsquic
adresinde Microsoft'un resmi Linux paket deposu packages.microsoft.com
aracılığıyla yayımlanır. Bu paketi yüklemek için:
- Depoyu
packages.microsoft.com
ekleyin. Yönergeler için bkz . Microsoft Ürünleri için Linux Yazılım Deposu. - Distro'nun
libmsquic
paket yöneticisini kullanarak paketi yükleyin. Örneğin,apt install libmsquic=1.9*
Ubuntu'da.
Not: .NET 6 yalnızca libmsquic'in 1.9.x sürümleriyle uyumludur. Libmsquic 2.x, hataya neden olan değişiklikler nedeniyle uyumlu değil. Libmsquic, güvenlik düzeltmelerini eklemek için gerektiğinde 1.9.x güncelleştirmelerini alır.
macOS
HTTP/3 şu anda macOS'ta desteklenmemektedir ve gelecekteki bir sürümde kullanılabilir.
Başlarken
HTTP/3 varsayılan olarak etkin değildir. HTTP/3'i etkinleştirmek için öğesine Program.cs
yapılandırma ekleyin.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Yukarıdaki kod 5001 numaralı bağlantı noktasını şu şekilde yapılandırıyor:
- belirterek
HttpProtocols.Http1AndHttp2AndHttp3
HTTP/1.1 ve HTTP/2 ile birlikte HTTP/3 kullanın. - ile
UseHttps
HTTPS'yi etkinleştirin. HTTP/3 için HTTPS gerekir.
Tüm yönlendiriciler, güvenlik duvarları ve proxy'ler HTTP/3'i düzgün desteklemediğinden HTTP/3, HTTP/1.1 ve HTTP/2 ile birlikte yapılandırılmalıdır. Bu, uç noktanın desteklenen protokolleri olarak belirtilerek HttpProtocols.Http1AndHttp2AndHttp3
yapılabilir.
Daha fazla bilgi için bkz . ASP.NET Core Kestrel web sunucusu için uç noktaları yapılandırma.
Alt-svc
HTTP/3, üst bilgi aracılığıyla alt-svc
HTTP/1.1 veya HTTP/2'den yükseltme olarak bulunur. Bu, ilk isteğin HTTP/3'e geçmeden önce normalde HTTP/1.1 veya HTTP/2 kullanacağı anlamına gelir. Kestrel HTTP/3 etkinse üst bilgiyi otomatik olarak ekler alt-svc
.
Localhost testi
Tarayıcılar HTTP/3'te geliştirme sertifikası gibi otomatik olarak imzalanan sertifikalara Kestrel izin vermez.
HttpClient
.NET 6 veya sonraki sürümlerde localhost/geri döngü testi için kullanılabilir. HTTP/3 isteği yapmak için kullanılırkenHttpClient
ek yapılandırma gerekir:- 3.0 olarak ayarlayın
HttpRequestMessage.Version
veya HttpRequestMessage.VersionPolicy
seçeneğiniHttpVersionPolicy.RequestVersionOrHigher
olarak ayarlayın.
- 3.0 olarak ayarlayın
Sınırlamalar
Bazı HTTPS senaryoları henüz içinde HTTP/3 için desteklenmemektedir Kestrel. HTTP/3 kullanırken ile HttpsConnectionAdapterOptions çağrısı Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps
yaparken, üzerinde HttpsConnectionAdapterOptions aşağıdaki seçeneklerin ayarlanması işlem yapılmaz (hiçbir şey yapmaz):
HTTP/3 kullanırken aşağıdaki uygulamaları Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps
çağırmak hata oluşturur:
- UseHttps(bu ListenOptions listenOptions, ServerOptionsSelectionCallback sunucusuOptionsSelectionCallback, nesne durumu, TimeSpan handshakeTimeout)
- UseHttps(bu ListenOptions listenOptions, TlsHandshakeCallbackOptions callbackOptions)
HTTP/3 avantajları
HTTP/3, HTTP/1.1 ve HTTP/2 ile aynı semantiği kullanır: tüm sürümler için aynı istek yöntemleri, durum kodları ve ileti alanları geçerlidir. Farklılıklar temel alınan taşımadadır. Hem HTTP/1.1 hem de HTTP/2, aktarımları olarak TCP kullanır. HTTP/3, HTTP/3 ile birlikte geliştirilen QUIC adlı yeni bir aktarım teknolojisi kullanır.
HTTP/3 ve QUIC'nin HTTP/1.1 ve HTTP/2 ile karşılaştırıldığında bir dizi avantajı vardır:
- İlk isteğin daha hızlı yanıt süresi. QUIC ve HTTP/3, istemci ile sunucu arasında daha az gidiş dönüşte bağlantı kurar. İlk istek sunucuya daha hızlı ulaşır.
- Bağlantı paketi kaybı olduğunda geliştirilmiş deneyim. HTTP/2, bir TCP bağlantısı aracılığıyla birden çok isteği birden çok kez katlar. Bağlantıdaki paket kaybı tüm istekleri etkiler. Bu soruna "satır başı engelleme" adı verilir. QUIC yerel çoğullama sağladığından, kayıp paketler yalnızca verilerin kaybolduğu istekleri etkiler.
- Ağlar arasında geçişi destekler. Bu özellik, bir mobil cihaz konum değiştirirken WIFI ile hücresel ağlar arasında geçiş yapmak yaygın olan mobil cihazlar için kullanışlıdır. Şu anda HTTP/1.1 ve HTTP/2 bağlantıları, ağlar arasında geçiş yaparken bir hatayla başarısız olur. Bir uygulama veya web tarayıcılarının başarısız http isteklerini yeniden denemesi gerekir. HTTP/3, bir ağ değiştiğinde uygulamanın veya web tarayıcısının sorunsuz bir şekilde devam etmesini sağlar. Kestrel .NET 6'da ağ geçişlerini desteklemez. Gelecek bir sürümde kullanılabilir.
ASP.NET Core