Nguon: Microsoft Learn · .NET 8.0

Sử dụng ASP.NET Core với HTTP/2 trên IIS

Nguồn: Use ASP.NET Core with HTTP/2 on IIS

Tác giả: Justin Kotalik

HTTP/2 (phiên bản giao thức HTTP thứ hai) được hỗ trợ với ASP.NET Core trong các kịch bản triển khai IIS (Internet Information Services) sau đây:

Đối với triển khai in-process (trong tiến trình) khi kết nối HTTP/2 được thiết lập, HttpRequest.Protocol báo cáo HTTP/2. Đối với triển khai out-of-process (ngoài tiến trình) khi kết nối HTTP/2 được thiết lập, HttpRequest.Protocol báo cáo HTTP/1.1.

Để biết thêm thông tin về các mô hình hosting in-process và out-of-process, xem ASP.NET Core Module (ANCM) for IIS.

HTTP/2 được bật mặc định cho các kết nối HTTPS/TLS. Các kết nối sẽ trở về HTTP/1.1 nếu kết nối HTTP/2 không được thiết lập. Để biết thêm thông tin về cấu hình HTTP/2 với các triển khai IIS, xem HTTP/2 on IIS.

Các tính năng HTTP/2 nâng cao để hỗ trợ gRPC

Các tính năng HTTP/2 bổ sung trong IIS hỗ trợ gRPC (Google Remote Procedure Call), bao gồm hỗ trợ trailers (phần đuôi) của phản hồi và gửi các khung reset.

Yêu cầu để chạy gRPC trên IIS:

Trailers (Phần đuôi phản hồi)

HTTP Trailers tương tự như HTTP Headers (tiêu đề HTTP), ngoại trừ việc chúng được gửi sau khi phần thân phản hồi đã được gử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 ví dụ code trên:

Reset (Đặt lại)

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

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

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