ASP.NET Core Kestrel 웹 서버에서 HTTP/2 사용
참고 항목
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
Important
이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.
현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
다음 기본 요구 사항이 충족되는 경우 ASP.NET Core 앱에 대해 HTTP/2를 사용할 수 있습니다.
- 운영 체제
- Windows Server 2016/Windows 10 이상‡
- Linux 및 OpenSSL 1.0.2 이상(예: Ubuntu 16.04 이상)
- macOS 10.15 이상
- 대상 프레임워크: .NET Core 2.2 이상
- ALPN(Application-Layer Protocol Negotiation) 연결
- TLS 1.2 이상 연결
‡Kestrel은 Windows Server 2012 R2 및 Windows 8.1에서 HTTP/2를 제한적으로 지원합니다. 이러한 운영 체제에서 사용할 수 있는 지원 가능 TLS 암호 그룹 목록이 제한되므로 지원이 제한됩니다. TLS 연결을 보호하는 데 ECDSA(타원 곡선 디지털 서명 알고리즘)를 사용하여 생성된 인증서가 필요할 수 있습니다.
HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/2
을 보고합니다.
.NET Core 3.0부터 HTTP/2는 기본적으로 사용됩니다. 구성에 관한 자세한 내용은 Kestrel HTTP/2 제한 및 ListenOptions.Protocols 섹션을 참조하세요.
고급 HTTP/2 기능
Kestrel의 추가 HTTP/2 기능은 응답 트레일러 및 초기화 프레임 전송을 위한 지원을 포함하여 gRPC를 지원합니다.
트레일러
HTTP 트레일러는 응답 본문이 전송된 후에 전송된다는 점을 제외하고 HTTP 헤더와 유사합니다. IIS 및 HTTP.sys의 경우 HTTP/2 응답 트레일러만 지원됩니다.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
앞의 예제 코드에서:
SupportsTrailers
는 응답을 위해 트레일러가 지원되는지 확인합니다.DeclareTrailer
는Trailer
응답 헤더에 지정된 트레일러 이름을 추가합니다. 응답 트레일러 선언은 선택 사항이지만 권장됩니다.DeclareTrailer
가 호출되는 경우 해당 트레일러는 응답 헤더가 전송되기 전에 있어야 합니다.AppendTrailer
는 트레일러를 추가합니다.
Reset
초기화를 사용하면 서버에서 지정된 오류 코드를 사용하여 HTTP/2 요청을 초기화할 수 있습니다. 초기화 요청은 중단된 것으로 간주합니다.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
이전 코드 예제의 Reset
은 INTERNAL_ERROR
오류 코드를 지정합니다. HTTP/2 오류 코드에 관한 자세한 내용은 HTTP/2 사양 오류 코드 섹션을 참조하세요.
다음 기본 요구 사항이 충족되는 경우 ASP.NET Core 앱에 대해 HTTP/2를 사용할 수 있습니다.
- 운영 체제†
- Windows Server 2016/Windows 10 이상‡
- Linux 및 OpenSSL 1.0.2 이상(예: Ubuntu 16.04 이상)
- 대상 프레임워크: .NET Core 2.2 이상
- ALPN(Application-Layer Protocol Negotiation) 연결
- TLS 1.2 이상 연결
†macOS에서는 이후 릴리스에서 HTTP/2가 지원됩니다. ‡Kestrel은 Windows Server 2012 R2 및 Windows 8.1에서 HTTP/2를 제한적으로 지원합니다. 이러한 운영 체제에서 사용할 수 있는 지원 가능 TLS 암호 그룹 목록이 제한되므로 지원이 제한됩니다. TLS 연결을 보호하는 데 ECDSA(타원 곡선 디지털 서명 알고리즘)를 사용하여 생성된 인증서가 필요할 수 있습니다.
HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/2
을 보고합니다.
.NET Core 3.0부터 HTTP/2는 기본적으로 사용됩니다. 구성에 관한 자세한 내용은 Kestrel HTTP/2 제한 및 ListenOptions.Protocols 섹션을 참조하세요.
고급 HTTP/2 기능
Kestrel의 추가 HTTP/2 기능은 응답 트레일러 및 초기화 프레임 전송을 위한 지원을 포함하여 gRPC를 지원합니다.
트레일러
HTTP 트레일러는 응답 본문이 전송된 후에 전송된다는 점을 제외하고 HTTP 헤더와 유사합니다. IIS 및 HTTP.sys의 경우 HTTP/2 응답 트레일러만 지원됩니다.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
앞의 예제 코드에서:
SupportsTrailers
는 응답을 위해 트레일러가 지원되는지 확인합니다.DeclareTrailer
는Trailer
응답 헤더에 지정된 트레일러 이름을 추가합니다. 응답 트레일러 선언은 선택 사항이지만 권장됩니다.DeclareTrailer
가 호출되는 경우 해당 트레일러는 응답 헤더가 전송되기 전에 있어야 합니다.AppendTrailer
는 트레일러를 추가합니다.
Reset
초기화를 사용하면 서버에서 지정된 오류 코드를 사용하여 HTTP/2 요청을 초기화할 수 있습니다. 초기화 요청은 중단된 것으로 간주합니다.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
이전 코드 예제의 Reset
은 INTERNAL_ERROR
오류 코드를 지정합니다. HTTP/2 오류 코드에 관한 자세한 내용은 HTTP/2 사양 오류 코드 섹션을 참조하세요.
다음 기본 요구 사항이 충족되는 경우 ASP.NET Core 앱에 대해 HTTP/2를 사용할 수 있습니다.
- 운영 체제†
- Windows Server 2016/Windows 10 이상‡
- Linux 및 OpenSSL 1.0.2 이상(예: Ubuntu 16.04 이상)
- 대상 프레임워크: .NET Core 2.2 이상
- ALPN(Application-Layer Protocol Negotiation) 연결
- TLS 1.2 이상 연결
†macOS에서는 이후 릴리스에서 HTTP/2가 지원됩니다. ‡Kestrel은 Windows Server 2012 R2 및 Windows 8.1에서 HTTP/2를 제한적으로 지원합니다. 이러한 운영 체제에서 사용할 수 있는 지원 가능 TLS 암호 그룹 목록이 제한되므로 지원이 제한됩니다. TLS 연결을 보호하는 데 ECDSA(타원 곡선 디지털 서명 알고리즘)를 사용하여 생성된 인증서가 필요할 수 있습니다.
HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/2
을 보고합니다.
.NET Core 3.0부터 HTTP/2는 기본적으로 사용됩니다. 구성에 관한 자세한 내용은 Kestrel HTTP/2 제한 및 ListenOptions.Protocols 섹션을 참조하세요.
고급 HTTP/2 기능
Kestrel의 추가 HTTP/2 기능은 응답 트레일러 및 초기화 프레임 전송을 위한 지원을 포함하여 gRPC를 지원합니다.
트레일러
HTTP 트레일러는 응답 본문이 전송된 후에 전송된다는 점을 제외하고 HTTP 헤더와 유사합니다. IIS 및 HTTP.sys의 경우 HTTP/2 응답 트레일러만 지원됩니다.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
앞의 예제 코드에서:
SupportsTrailers
는 응답을 위해 트레일러가 지원되는지 확인합니다.DeclareTrailer
는Trailer
응답 헤더에 지정된 트레일러 이름을 추가합니다. 응답 트레일러 선언은 선택 사항이지만 권장됩니다.DeclareTrailer
가 호출되는 경우 해당 트레일러는 응답 헤더가 전송되기 전에 있어야 합니다.AppendTrailer
는 트레일러를 추가합니다.
Reset
초기화를 사용하면 서버에서 지정된 오류 코드를 사용하여 HTTP/2 요청을 초기화할 수 있습니다. 초기화 요청은 중단된 것으로 간주합니다.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
이전 코드 예제의 Reset
은 INTERNAL_ERROR
오류 코드를 지정합니다. HTTP/2 오류 코드에 관한 자세한 내용은 HTTP/2 사양 오류 코드 섹션을 참조하세요.
ASP.NET Core