Bagikan melalui


Menggunakan ASP.NET Core dengan HTTP/2 di IIS

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.

Oleh Justin Kotalik

HTTP/2 didukung dengan ASP.NET Core dalam skenario penyebaran IIS berikut:

  • Windows Server 2016 atau yang lebih baru / Windows 10 atau yang lebih baru
  • IIS 10 atau yang lebih baru
  • TLS 1.2 atau koneksi yang lebih baru
  • Saat menghosting di luar proses: Koneksi server tepi yang menghadap publik menggunakan HTTP/2, tetapi koneksi proksi terbalik ke Kestrel server menggunakan HTTP/1.1.

Untuk penyebaran dalam proses saat koneksi HTTP/2 dibuat, HttpRequest.Protocol melaporkan HTTP/2. Untuk penyebaran di luar proses saat koneksi HTTP/2 dibuat, HttpRequest.Protocol melaporkan HTTP/1.1.

Untuk informasi lebih lanjut tentang model hosting dalam proses dan di luar proses, lihat ASP.NET Core Module (ANCM) untuk IIS.

HTTP/2 diaktifkan secara default untuk koneksi HTTPS/TLS. Koneksi kembali ke HTTP/1.1 jika koneksi HTTP/2 tidak dibuat. Untuk informasi lebih lanjut tentang konfigurasi HTTP/2 dengan penyebaran IIS, lihat HTTP/2 di IIS.

Fitur HTTP/2 tingkat lanjut untuk mendukung gRPC

Fitur HTTP/2 tambahan di IIS mendukung gRPC, termasuk dukungan untuk trailer respons dan mengirim bingkai reset.

Persyaratan untuk menjalankan gRPC di IIS:

  • Hosting dalam proses.
  • Windows 11 Build 22000 atau yang lebih baru, Windows Server 2022 Build 20348 atau yang lebih baru.
  • Koneksi TLS 1.2 atau yang lebih baru.

Trailer

Http Trailer mirip dengan Header HTTP, kecuali dikirim setelah isi respons dikirim. Untuk IIS dan HTTP.sys, hanya trailer respons HTTP/2 yang didukung.

if (httpContext.Response.SupportsTrailers())
{
    httpContext.Response.DeclareTrailer("trailername");	

    // Write body
    httpContext.Response.WriteAsync("Hello world");

    httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}

Dalam kode contoh sebelumnya:

  • SupportsTrailers memastikan bahwa trailer didukung untuk respons.
  • DeclareTrailer menambahkan nama trailer yang diberikan ke Trailer header respons. Mendeklarasikan trailer respons bersifat opsional, tetapi disarankan. Jika DeclareTrailer dipanggil, harus sebelum header respons dikirim.
  • AppendTrailer menambahkan trailer.

Reset

Reset memungkinkan server untuk mengatur ulang permintaan HTTP/2 dengan kode kesalahan tertentu. Permintaan reset dianggap dibatalkan.

var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);

Reset dalam contoh kode sebelumnya menentukan INTERNAL_ERROR kode kesalahan. Untuk informasi selengkapnya tentang kode kesalahan HTTP/2, kunjungi bagian kode kesalahan spesifikasi HTTP/2.