ASP.NET Core Kestrel web sunucusuyla HTTP/3 kullanma

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

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.comaracılığıyla yayımlanır. Bu paketi yüklemek için:

  1. Depoyu packages.microsoft.com ekleyin. Yönergeler için bkz . Microsoft Ürünleri için Linux Yazılım Deposu.
  2. 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.Http1AndHttp2AndHttp3HTTP/1.1 ve HTTP/2 ile birlikte HTTP/3 kullanın.
  • ile UseHttpsHTTPS'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

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.comaracılığıyla yayımlanır. Bu paketi yüklemek için:

  1. Depoyu packages.microsoft.com ekleyin. Yönergeler için bkz . Microsoft Ürünleri için Linux Yazılım Deposu.
  2. 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.Http1AndHttp2AndHttp3HTTP/1.1 ve HTTP/2 ile birlikte HTTP/3 kullanın.
  • ile UseHttpsHTTPS'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

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.comaracılığıyla yayımlanır. Bu paketi yüklemek için:

  1. Depoyu packages.microsoft.com ekleyin. Yönergeler için bkz . Microsoft Ürünleri için Linux Yazılım Deposu.
  2. 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.Http1AndHttp2AndHttp3HTTP/1.1 ve HTTP/2 ile birlikte HTTP/3 kullanın.
  • ile UseHttpsHTTPS'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ırken HttpClient ek yapılandırma gerekir:

    • 3.0 olarak ayarlayın HttpRequestMessage.Version veya
    • HttpRequestMessage.VersionPolicy seçeneğini HttpVersionPolicy.RequestVersionOrHigher 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:

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.