ASP.NET Core Kestrel 웹 서버에서 HTTP/2 사용

다음 기본 요구 사항이 충족되는 경우 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는 응답을 위해 트레일러가 지원되는지 확인합니다.
  • DeclareTrailerTrailer 응답 헤더에 지정된 트레일러 이름을 추가합니다. 응답 트레일러 선언은 선택 사항이지만 권장됩니다. DeclareTrailer가 호출되는 경우 해당 트레일러는 응답 헤더가 전송되기 전에 있어야 합니다.
  • AppendTrailer는 트레일러를 추가합니다.

Reset

초기화를 사용하면 서버에서 지정된 오류 코드를 사용하여 HTTP/2 요청을 초기화할 수 있습니다. 초기화 요청은 중단된 것으로 간주합니다.

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

이전 코드 예제의 ResetINTERNAL_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는 응답을 위해 트레일러가 지원되는지 확인합니다.
  • DeclareTrailerTrailer 응답 헤더에 지정된 트레일러 이름을 추가합니다. 응답 트레일러 선언은 선택 사항이지만 권장됩니다. DeclareTrailer가 호출되는 경우 해당 트레일러는 응답 헤더가 전송되기 전에 있어야 합니다.
  • AppendTrailer는 트레일러를 추가합니다.

Reset

초기화를 사용하면 서버에서 지정된 오류 코드를 사용하여 HTTP/2 요청을 초기화할 수 있습니다. 초기화 요청은 중단된 것으로 간주합니다.

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

이전 코드 예제의 ResetINTERNAL_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는 응답을 위해 트레일러가 지원되는지 확인합니다.
  • DeclareTrailerTrailer 응답 헤더에 지정된 트레일러 이름을 추가합니다. 응답 트레일러 선언은 선택 사항이지만 권장됩니다. DeclareTrailer가 호출되는 경우 해당 트레일러는 응답 헤더가 전송되기 전에 있어야 합니다.
  • AppendTrailer는 트레일러를 추가합니다.

Reset

초기화를 사용하면 서버에서 지정된 오류 코드를 사용하여 HTTP/2 요청을 초기화할 수 있습니다. 초기화 요청은 중단된 것으로 간주합니다.

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

이전 코드 예제의 ResetINTERNAL_ERROR 오류 코드를 지정합니다. HTTP/2 오류 코드에 관한 자세한 내용은 HTTP/2 사양 오류 코드 섹션을 참조하세요.