Sử dụng ASP.NET Core với HTTP/3 trên IIS
Tác giả: Chris Ross
HTTP/3 được hỗ trợ đầy đủ với ASP.NET Core trong các kịch bản IIS sau đây:
- In-process (trong tiến trình)
- Out-of-Process (ngoài tiến trình). Trong chế độ Out-of-Process, IIS phản hồi với client sử dụng HTTP/3, nhưng kết nối reverse proxy (proxy ngược) tới máy chủ Kestrel sử dụng 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.
Các yêu cầu bổ sung cũng cần được đáp ứng:
- Windows Server 2022 / Windows 11 trở lên
- Sử dụng ràng buộc URL (url binding)
https. - Đã đặt khóa registry EnableHttp3.
Đối với triển khai in-process khi kết nối HTTP/3 được thiết lập, HttpRequest.Protocol báo cáo HTTP/3. Đối với triển khai out-of-process khi kết nối HTTP/3 được thiết lập, HttpRequest.Protocol báo cáo HTTP/1.1 vì đó là cách IIS proxy các yêu cầu tới Kestrel.
Alt-Svc
HTTP/3 được khám phá như một nâng cấp từ HTTP/1.1 hoặc HTTP/2 thông qua tiêu đề alt-svc. Điều đó có nghĩa là yêu cầu đầu tiên thường sẽ sử dụng HTTP/1.1 hoặc HTTP/2 trước khi chuyển sang HTTP/3. IIS không tự động thêm tiêu đề alt-svc, nó phải được thêm bởi ứng dụng. Code sau đây là một ví dụ middleware (phần mềm trung gian) thêm tiêu đề phản hồi alt-svc.
app.Use((context, next) =>
{
context.Response.Headers.AltSvc = "h3=\":443\"";
return next(context);
});Đặt code trên ở đầu pipeline (đường ống) xử lý yêu cầu.
IIS cũng hỗ trợ gửi thông báo giao thức HTTP/2 AltSvc thay vì tiêu đề phản hồi để thông báo cho client rằng HTTP/3 có sẵn. Xem khóa registry EnableAltSvc. Lưu ý điều này yêu cầu các ràng buộc sslcert của netsh sử dụng tên máy chủ thay vì địa chỉ IP.