Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
HTTP/3 adalah versi utama HTTP ketiga dan yang baru-baru ini distandarkan. 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 yang dikembangkan bersama HTTP/3 yang disebut QUIC.
HTTP/3 dan QUIC memiliki beberapa manfaat dibandingkan dengan HTTP/1.1 dan HTTP/2:
- Waktu respons yang lebih cepat untuk permintaan pertama. QUIC dan HTTP/3 menegosiasikan koneksi dalam lebih sedikit perjalanan pulang pergi antara klien dan server. Permintaan pertama mencapai server lebih cepat.
- Peningkatan pengalaman saat terjadi 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 pemultipleksan asli, paket yang hilang hanya memengaruhi permintaan yang datanya hilang.
- Mendukung transisi antar jaringan. Fitur ini berguna untuk perangkat seluler, di mana biasa beralih antara WIFI dan jaringan seluler saat perangkat bergerak dan berpindah lokasi. 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. HttpClient dan Kestrel tidak mendukung transisi jaringan di .NET 7. Ini mungkin tersedia dalam rilis mendatang.
Penting
Aplikasi yang dikonfigurasi untuk memanfaatkan HTTP/3 harus dirancang untuk juga mendukung HTTP/1.1 dan HTTP/2. Jika masalah diidentifikasi dalam HTTP/3, disarankan untuk menonaktifkan HTTP/3 hingga masalah diselesaikan dalam rilis .NET di masa mendatang.
Pengaturan HttpClient
Versi HTTP dapat dikonfigurasi dengan mengatur HttpRequestMessage.Version ke 3.0. Namun, karena tidak semua router, firewall, dan proksi mendukung HTTP/3 dengan benar, disarankan untuk mengonfigurasi HTTP/3 bersama dengan HTTP/1.1 dan HTTP/2. Dalam HttpClient, ini dapat dilakukan dengan menentukan:
- HttpRequestMessage.Version ke 1.1.
- HttpRequestMessage.VersionPolicy ke HttpVersionPolicy.RequestVersionOrHigher.
Ketergantungan platform
HTTP/3 menggunakan QUIC sebagai protokol transportasinya. Implementasi .NET HTTP/3 menggunakan MsQuic untuk menyediakan fungsionalitas QUIC. Akibatnya, dukungan .NET HTTP/3 tergantung pada persyaratan platform MsQuic. Untuk informasi selengkapnya tentang cara menginstal MsQuic, lihat dependensi PLATFORM QUIC. Jika platform yang dijalankan HttpClient tidak memiliki semua persyaratan untuk HTTP/3, maka dinonaktifkan.
Menggunakan HttpClient
Contoh kode berikut menggunakan pernyataan tingkat atas dan menunjukkan cara menentukan HTTP3 dalam permintaan:
// See https://aka.ms/new-console-template for more information
using System.Net;
using var client = new HttpClient
{
DefaultRequestVersion = HttpVersion.Version30,
DefaultVersionPolicy = HttpVersionPolicy.RequestVersionExact
};
Console.WriteLine("--- localhost:5001 ---");
HttpResponseMessage resp = await client.GetAsync("https://localhost:5001/");
string body = await resp.Content.ReadAsStringAsync();
Console.WriteLine(
$"status: {resp.StatusCode}, version: {resp.Version}, " +
$"body: {body.Substring(0, Math.Min(100, body.Length))}");
Dukungan HTTP/3 di .NET 6
Di .NET 6, HTTP/3 tersedia sebagai fitur pratinjau karena spesifikasi HTTP/3 belum diselesaikan. Masalah perilaku atau performa mungkin ada di HTTP/3 dengan .NET 6. Untuk informasi selengkapnya tentang fitur pratinjau, lihat spesifikasi fitur pratinjau.
Untuk mengaktifkan dukungan HTTP/3 di .NET 6, sertakan simpul RuntimeHostConfigurationOption dalam file proyek untuk mengaktifkan HTTP/3 dengan HttpClient:
<ItemGroup>
<RuntimeHostConfigurationOption Value="true"
Include="System.Net.SocketsHttpHandler.Http3Support" />
</ItemGroup>
Atau, Anda dapat memanggil System.AppContext.SetSwitch dari kode aplikasi, atau mengatur DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP3SUPPORT variabel lingkungan ke true. Untuk informasi selengkapnya, lihat variabel lingkungan .NET: DOTNET_SYSTEM_NET_HTTP_*.
Alasan untuk memerlukan bendera konfigurasi untuk HTTP/3 adalah untuk melindungi aplikasi dari kerusakan di masa mendatang saat menggunakan kebijakan RequestVersionOrHigherversi . Saat memanggil server yang saat ini menggunakan HTTP/1.1 dan HTTP/2, jika server kemudian meningkatkan ke HTTP/3, klien akan mencoba menggunakan HTTP/3 dan berpotensi tidak kompatibel karena standar tidak final dan oleh karena itu dapat berubah setelah .NET 6 dirilis.
.NET 6 hanya kompatibel dengan libmsquic versi 1.9.x. Libmsquic 2.x tidak kompatibel dengan .NET 6 karena perubahan signifikan dalam pustaka. Libmsquic menerima pembaruan ke 1.9.x saat diperlukan untuk menggabungkan perbaikan keamanan.
HTTP/3 Server
HTTP/3 didukung oleh ASP.NET dengan server Kestrel di .NET 6 (sebagai pratinjau) dan .NET 7 (didukung sepenuhnya). Untuk informasi selengkapnya, lihat menggunakan HTTP/3 dengan server web ASP.NET Core Kestrel.
Server uji publik
Cloudflare menghosting situs untuk HTTP/3 yang dapat digunakan untuk menguji klien di https://cloudflare-quic.com.