Nguon: Microsoft Learn · .NET 8.0

Sử dụng HTTP/2 với máy chủ web Kestrel trong ASP.NET Core

Nguồn: Use HTTP/2 with the ASP.NET Core Kestrel web server

HTTP/2 khả dụng cho các ứng dụng ASP.NET Core nếu đáp ứng các yêu cầu cơ bản sau:

‡Kestrel có hỗ trợ giới hạn cho HTTP/2 trên Windows Server 2012 R2 và Windows 8.1. Hỗ trợ bị giới hạn vì danh sách các cipher suite (bộ mã hóa) TLS được hỗ trợ trên các hệ điều hành này có hạn. Có thể cần một chứng chỉ được tạo bằng Elliptic Curve Digital Signature Algorithm (ECDSA) để bảo mật kết nối TLS.

Nếu kết nối HTTP/2 được thiết lập, HttpRequest.Protocol sẽ báo cáo HTTP/2.

Bắt đầu từ .NET Core 3.0, HTTP/2 được bật theo mặc định. Để biết thêm thông tin về cấu hình, xem phần Kestrel HTTP/2 limitsListenOptions.Protocols.

Các tính năng HTTP/2 nâng cao

Các tính năng HTTP/2 bổ sung trong Kestrel hỗ trợ gRPC, bao gồm hỗ trợ response trailers (đoạn cuối phản hồi) và gửi reset frames (khung đặt lại).

Trailers

HTTP Trailers (đoạn cuối HTTP) tương tự như HTTP Headers (tiêu đề HTTP), ngoại trừ chúng được gửi sau khi body của phản hồi được gửi đi. Đối với IIS và HTTP.sys, chỉ HTTP/2 response trailers được hỗ trợ.

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

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

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

Trong đoạn mã ví dụ trên:

Reset

Reset (đặt lại) cho phép máy chủ đặt lại một yêu cầu HTTP/2 với một mã lỗi được chỉ định. Một yêu cầu bị đặt lại được coi là đã bị hủy bỏ (aborted).

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

Reset trong ví dụ mã trên chỉ định mã lỗi INTERNAL_ERROR. Để biết thêm thông tin về mã lỗi HTTP/2, hãy truy cập phần mã lỗi trong đặc tả HTTP/2.