Menggunakan HTTP/3 dengan server web ASP.NET Core Kestrel
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
HTTP/3 adalah standar yang disetujui dan versi utama HTTP ketiga. Artikel ini membahas persyaratan untuk HTTP/3. HTTP/3 didukung penuh di ASP.NET Core 7.0 dan yang lebih baru.
Penting
Aplikasi yang dikonfigurasi untuk memanfaatkan HTTP/3 harus dirancang untuk juga mendukung HTTP/1.1 dan HTTP/2.
Persyaratan HTTP/3
HTTP/3 memiliki persyaratan yang berbeda tergantung pada sistem operasi. Jika platform yang Kestrel berjalan tidak memiliki semua persyaratan untuk HTTP/3, maka platform dinonaktifkan, dan Kestrel akan kembali ke protokol HTTP lainnya.
Windows
- Windows 11 Build 22000 atau yang lebih baru ATAU Windows Server 2022.
- Koneksi TLS 1.3 atau yang lebih baru.
Linux
libmsquic
paket terinstal.
libmsquic
diterbitkan melalui repositori paket Linux resmi Microsoft di packages.microsoft.com
. Untuk menginstal paket ini:
packages.microsoft.com
Tambahkan repositori. Lihat Repositori Perangkat Lunak Linux untuk Produk Microsoft untuk petunjuknya.libmsquic
Instal paket menggunakan manajer paket distro. Misalnya,apt install libmsquic=1.9*
pada Ubuntu.
Catatan: .NET 6 hanya kompatibel dengan libmsquic versi 1.9.x. Libmsquic 2.x tidak kompatibel karena perubahan yang melanggar. Libmsquic menerima pembaruan ke 1.9.x saat diperlukan untuk menggabungkan perbaikan keamanan.
macOS
HTTP/3 saat ini tidak didukung di macOS dan mungkin tersedia dalam rilis mendatang.
Memulai
HTTP/3 tidak diaktifkan secara default. Tambahkan konfigurasi ke Program.cs
untuk mengaktifkan HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Kode sebelumnya mengonfigurasi port 5001 untuk:
- Gunakan HTTP/3 bersama HTTP/1.1 dan HTTP/2 dengan menentukan
HttpProtocols.Http1AndHttp2AndHttp3
. - Aktifkan HTTPS dengan
UseHttps
. HTTP/3 memerlukan HTTPS.
Karena tidak semua router, firewall, dan proksi mendukung HTTP/3 dengan benar, HTTP/3 harus dikonfigurasi bersama dengan HTTP/1.1 dan HTTP/2. Ini dapat dilakukan dengan menentukan HttpProtocols.Http1AndHttp2AndHttp3
sebagai protokol yang didukung titik akhir.
Untuk informasi selengkapnya, lihat Mengonfigurasi titik akhir untuk server web ASP.NET CoreKestrel.
Alt-svc
HTTP/3 ditemukan sebagai peningkatan dari HTTP/1.1 atau HTTP/2 melalui alt-svc
header. Itu berarti permintaan pertama biasanya akan menggunakan HTTP/1.1 atau HTTP/2 sebelum beralih ke HTTP/3. Kestrel secara otomatis menambahkan alt-svc
header jika HTTP/3 diaktifkan.
Pengujian localhost
Browser tidak mengizinkan sertifikat yang ditandatangani sendiri pada HTTP/3, seperti Kestrel sertifikat pengembangan.
HttpClient
dapat digunakan untuk pengujian localhost/loopback di .NET 6 atau yang lebih baru. Konfigurasi tambahan diperlukan saat menggunakanHttpClient
untuk membuat permintaan HTTP/3:- Atur
HttpRequestMessage.Version
ke 3.0, atau - Atur
HttpRequestMessage.VersionPolicy
keHttpVersionPolicy.RequestVersionOrHigher
.
- Atur
Manfaat HTTP/3
HTTP/3 menggunakan semantik yang sama dengan HTTP/1.1 dan HTTP/2: metode permintaan, kode status, dan bidang pesan yang sama berlaku untuk semua versi. Perbedaannya ada di transportasi yang mendasar. HTTP/1.1 dan HTTP/2 menggunakan TCP sebagai transportasinya. HTTP/3 menggunakan teknologi transportasi baru yang dikembangkan bersama HTTP/3 yang disebut QUIC.
HTTP/3 dan QUIC memiliki sejumlah manfaat dibandingkan dengan HTTP/1.1 dan HTTP/2:
- Waktu respons yang lebih cepat dari permintaan pertama. QUIC dan HTTP/3 menegosiasikan koneksi dalam lebih sedikit perjalanan pulang-pergi antara klien dan server. Permintaan pertama mencapai server lebih cepat.
- Pengalaman yang ditingkatkan ketika ada kehilangan paket koneksi. Multipleks HTTP/2 beberapa permintaan melalui satu koneksi TCP. Kehilangan paket pada koneksi memengaruhi semua permintaan. Masalah ini disebut "pemblokiran head-of-line". Karena QUIC menyediakan multiplexing asli, paket yang hilang hanya berdampak pada permintaan di mana data telah hilang.
- Mendukung transisi antar jaringan. Fitur ini berguna untuk perangkat seluler di mana umumnya untuk beralih antara WIFI dan jaringan seluler sebagai lokasi perubahan perangkat seluler. Saat ini, koneksi HTTP/1.1 dan HTTP/2 gagal dengan kesalahan saat beralih jaringan. Aplikasi atau browser web harus mencoba kembali permintaan HTTP yang gagal. HTTP/3 memungkinkan aplikasi atau browser web untuk melanjutkan dengan mulus saat jaringan berubah. Kestrel tidak mendukung transisi jaringan di .NET 8. Ini mungkin tersedia dalam rilis mendatang.
HTTP/3 adalah standar yang diusulkan dan versi utama HTTP ketiga. Artikel ini membahas persyaratan untuk HTTP/3. HTTP/3 didukung penuh di ASP.NET Core 7.0 dan yang lebih baru.
Penting
Aplikasi yang dikonfigurasi untuk memanfaatkan HTTP/3 harus dirancang untuk juga mendukung HTTP/1.1 dan HTTP/2.
Persyaratan HTTP/3
HTTP/3 memiliki persyaratan yang berbeda tergantung pada sistem operasi. Jika platform yang Kestrel berjalan tidak memiliki semua persyaratan untuk HTTP/3 maka dinonaktifkan, dan Kestrel akan kembali ke protokol HTTP lainnya.
Windows
- Windows 11 Build 22000 atau yang lebih baru ATAU Windows Server 2022.
- Koneksi TLS 1.3 atau yang lebih baru.
Linux
libmsquic
paket terinstal.
libmsquic
diterbitkan melalui repositori paket Linux resmi Microsoft di packages.microsoft.com
. Untuk menginstal paket ini:
packages.microsoft.com
Tambahkan repositori. Lihat Repositori Perangkat Lunak Linux untuk Produk Microsoft untuk petunjuknya.libmsquic
Instal paket menggunakan manajer paket distro. Misalnya,apt install libmsquic=1.9*
pada Ubuntu.
Catatan: .NET 6 hanya kompatibel dengan libmsquic versi 1.9.x. Libmsquic 2.x tidak kompatibel karena perubahan yang melanggar. Libmsquic menerima pembaruan ke 1.9.x saat diperlukan untuk menggabungkan perbaikan keamanan.
macOS
HTTP/3 saat ini tidak didukung di macOS dan mungkin tersedia dalam rilis mendatang.
Memulai
HTTP/3 tidak diaktifkan secara default. Tambahkan konfigurasi ke Program.cs
untuk mengaktifkan HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Kode sebelumnya mengonfigurasi port 5001 untuk:
- Gunakan HTTP/3 bersama HTTP/1.1 dan HTTP/2 dengan menentukan
HttpProtocols.Http1AndHttp2AndHttp3
. - Aktifkan HTTPS dengan
UseHttps
. HTTP/3 memerlukan HTTPS.
Karena tidak semua router, firewall, dan proksi mendukung HTTP/3 dengan benar, HTTP/3 harus dikonfigurasi bersama dengan HTTP/1.1 dan HTTP/2. Ini dapat dilakukan dengan menentukan HttpProtocols.Http1AndHttp2AndHttp3
sebagai protokol yang didukung titik akhir.
Untuk informasi selengkapnya, lihat Mengonfigurasi titik akhir untuk server web ASP.NET CoreKestrel.
Alt-svc
HTTP/3 ditemukan sebagai peningkatan dari HTTP/1.1 atau HTTP/2 melalui alt-svc
header. Itu berarti permintaan pertama biasanya akan menggunakan HTTP/1.1 atau HTTP/2 sebelum beralih ke HTTP/3. Kestrel secara otomatis menambahkan alt-svc
header jika HTTP/3 diaktifkan.
Pengujian localhost
Browser tidak mengizinkan sertifikat yang ditandatangani sendiri pada HTTP/3 seperti Kestrel sertifikat pengembangan.
HttpClient
dapat digunakan untuk pengujian localhost/loopback di .NET 6 atau yang lebih baru. Konfigurasi tambahan diperlukan saat menggunakanHttpClient
untuk membuat permintaan HTTP/3:- Atur
HttpRequestMessage.Version
ke 3.0, atau - Atur
HttpRequestMessage.VersionPolicy
keHttpVersionPolicy.RequestVersionOrHigher
.
- Atur
Manfaat HTTP/3
HTTP/3 menggunakan semantik yang sama dengan HTTP/1.1 dan HTTP/2: metode permintaan, kode status, dan bidang pesan yang sama berlaku untuk semua versi. Perbedaannya ada di transportasi yang mendasar. HTTP/1.1 dan HTTP/2 menggunakan TCP sebagai transportasinya. HTTP/3 menggunakan teknologi transportasi baru yang dikembangkan bersama HTTP/3 yang disebut QUIC.
HTTP/3 dan QUIC memiliki sejumlah manfaat dibandingkan dengan HTTP/1.1 dan HTTP/2:
- Waktu respons yang lebih cepat dari permintaan pertama. QUIC dan HTTP/3 menegosiasikan koneksi dalam lebih sedikit perjalanan pulang-pergi antara klien dan server. Permintaan pertama mencapai server lebih cepat.
- Pengalaman yang ditingkatkan ketika ada kehilangan paket koneksi. Multipleks HTTP/2 beberapa permintaan melalui satu koneksi TCP. Kehilangan paket pada koneksi memengaruhi semua permintaan. Masalah ini disebut "pemblokiran head-of-line". Karena QUIC menyediakan multiplexing asli, paket yang hilang hanya berdampak pada permintaan di mana data telah hilang.
- Mendukung transisi antar jaringan. Fitur ini berguna untuk perangkat seluler di mana umumnya untuk beralih antara WIFI dan jaringan seluler sebagai lokasi perubahan perangkat seluler. Saat ini koneksi HTTP/1.1 dan HTTP/2 gagal dengan kesalahan saat beralih jaringan. Aplikasi atau browser web harus mencoba kembali permintaan HTTP yang gagal. HTTP/3 memungkinkan aplikasi atau browser web untuk melanjutkan dengan mulus saat jaringan berubah. Kestrel tidak mendukung transisi jaringan di .NET 6. Ini mungkin tersedia dalam rilis mendatang.
HTTP/3 adalah versi utama HTTP ketiga dan yang akan datang. Artikel ini membahas persyaratan untuk HTTP/3 dan cara mengonfigurasi Kestrel untuk menggunakannya.
Penting
HTTP/3 tersedia di .NET 6 sebagai fitur pratinjau. Spesifikasi HTTP/3 tidak diselesaikan dan masalah perilaku atau performa mungkin ada di HTTP/3 dengan .NET 6.
Untuk informasi selengkapnya tentang dukungan fitur pratinjau, lihat bagian pratinjau fitur yang didukung.
Aplikasi yang dikonfigurasi untuk memanfaatkan HTTP/3 harus dirancang untuk juga mendukung HTTP/1.1 dan HTTP/2. Jika masalah diidentifikasi dalam HTTP/3, sebaiknya nonaktifkan HTTP/3 hingga masalah diselesaikan dalam rilis ASP.NET Core di masa mendatang. Masalah signifikan dilaporkan di repositori GitHub Pengumuman.
Persyaratan HTTP/3
HTTP/3 memiliki persyaratan yang berbeda tergantung pada sistem operasi. Jika platform yang Kestrel berjalan tidak memiliki semua persyaratan untuk HTTP/3 maka dinonaktifkan, dan Kestrel akan kembali ke protokol HTTP lainnya.
Windows
- Windows 11 Build 22000 atau yang lebih baru ATAU Windows Server 2022.
- Koneksi TLS 1.3 atau yang lebih baru.
Linux
libmsquic
paket terinstal.
libmsquic
diterbitkan melalui repositori paket Linux resmi Microsoft di packages.microsoft.com
. Untuk menginstal paket ini:
packages.microsoft.com
Tambahkan repositori. Lihat Repositori Perangkat Lunak Linux untuk Produk Microsoft untuk petunjuknya.libmsquic
Instal paket menggunakan manajer paket distro. Misalnya,apt install libmsquic=1.9*
pada Ubuntu.
Catatan: .NET 6 hanya kompatibel dengan libmsquic versi 1.9.x. Libmsquic 2.x tidak kompatibel karena perubahan yang melanggar. Libmsquic menerima pembaruan ke 1.9.x saat diperlukan untuk menggabungkan perbaikan keamanan.
macOS
HTTP/3 saat ini tidak didukung di macOS dan mungkin tersedia dalam rilis mendatang.
Memulai
HTTP/3 tidak diaktifkan secara default. Tambahkan konfigurasi ke Program.cs
untuk mengaktifkan HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Kode sebelumnya mengonfigurasi port 5001 untuk:
- Gunakan HTTP/3 bersama HTTP/1.1 dan HTTP/2 dengan menentukan
HttpProtocols.Http1AndHttp2AndHttp3
. - Aktifkan HTTPS dengan
UseHttps
. HTTP/3 memerlukan HTTPS.
Karena tidak semua router, firewall, dan proksi mendukung HTTP/3 dengan benar, HTTP/3 harus dikonfigurasi bersama dengan HTTP/1.1 dan HTTP/2. Ini dapat dilakukan dengan menentukan HttpProtocols.Http1AndHttp2AndHttp3
sebagai protokol yang didukung titik akhir.
Untuk informasi selengkapnya, lihat Mengonfigurasi titik akhir untuk server web ASP.NET CoreKestrel.
Alt-svc
HTTP/3 ditemukan sebagai peningkatan dari HTTP/1.1 atau HTTP/2 melalui alt-svc
header. Itu berarti permintaan pertama biasanya akan menggunakan HTTP/1.1 atau HTTP/2 sebelum beralih ke HTTP/3. Kestrel secara otomatis menambahkan alt-svc
header jika HTTP/3 diaktifkan.
Pengujian localhost
Browser tidak mengizinkan sertifikat yang ditandatangani sendiri pada HTTP/3 seperti Kestrel sertifikat pengembangan.
HttpClient
dapat digunakan untuk pengujian localhost/loopback di .NET 6 atau yang lebih baru. Konfigurasi tambahan diperlukan saat menggunakanHttpClient
untuk membuat permintaan HTTP/3:- Atur
HttpRequestMessage.Version
ke 3.0, atau - Atur
HttpRequestMessage.VersionPolicy
keHttpVersionPolicy.RequestVersionOrHigher
.
- Atur
Batasan
Beberapa skenario HTTPS belum didukung untuk HTTP/3 di Kestrel. Saat memanggil Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps
dengan HttpsConnectionAdapterOptions saat menggunakan HTTP/3, atur opsi berikut pada HttpsConnectionAdapterOptions adalah no-op (tidak melakukan apa pun):
Memanggil implementasi Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps
kesalahan saat menggunakan HTTP/3 berikut:
- UseHttps(listenOptions ListenOptions ini, ServerOptionsSelectionCallback serverOptionsSelectionCallback, status objek, TimeSpan handshakeTimeout)
- UseHttps(listenOptions listenOptions ini, TlsHandshakeCallbackOptions callbackOptions)
Manfaat HTTP/3
HTTP/3 menggunakan semantik yang sama dengan HTTP/1.1 dan HTTP/2: metode permintaan, kode status, dan bidang pesan yang sama berlaku untuk semua versi. Perbedaannya ada di transportasi yang mendasar. HTTP/1.1 dan HTTP/2 menggunakan TCP sebagai transportasinya. HTTP/3 menggunakan teknologi transportasi baru yang dikembangkan bersama HTTP/3 yang disebut QUIC.
HTTP/3 dan QUIC memiliki sejumlah manfaat dibandingkan dengan HTTP/1.1 dan HTTP/2:
- Waktu respons yang lebih cepat dari permintaan pertama. QUIC dan HTTP/3 menegosiasikan koneksi dalam lebih sedikit perjalanan pulang-pergi antara klien dan server. Permintaan pertama mencapai server lebih cepat.
- Pengalaman yang ditingkatkan ketika ada kehilangan paket koneksi. Multipleks HTTP/2 beberapa permintaan melalui satu koneksi TCP. Kehilangan paket pada koneksi memengaruhi semua permintaan. Masalah ini disebut "pemblokiran head-of-line". Karena QUIC menyediakan multiplexing asli, paket yang hilang hanya berdampak pada permintaan di mana data telah hilang.
- Mendukung transisi antar jaringan. Fitur ini berguna untuk perangkat seluler di mana umumnya untuk beralih antara WIFI dan jaringan seluler sebagai lokasi perubahan perangkat seluler. Saat ini koneksi HTTP/1.1 dan HTTP/2 gagal dengan kesalahan saat beralih jaringan. Aplikasi atau browser web harus mencoba kembali permintaan HTTP yang gagal. HTTP/3 memungkinkan aplikasi atau browser web untuk melanjutkan dengan mulus saat jaringan berubah. Kestrel tidak mendukung transisi jaringan di .NET 6. Ini mungkin tersedia dalam rilis mendatang.
ASP.NET Core