IIS의 HTTP/2에서 ASP.NET Core 사용

작성자 Justin Kotalik

HTTP/2는 다음과 같은 IIS 배포 시나리오에서 ASP.NET Core를 통해 지원됩니다.

  • Windows Server 2016 이상/Windows 10 이상
  • IIS 10 이상
  • TLS 1.2 이상 연결
  • Out of Process를 호스팅하는 경우: 공용 에지 서버 연결은 HTTP/2를 사용하지만 Kestrel 서버에 대한 역방향 프록시 연결은 HTTP/1.1을 사용합니다.

In-Process 배포에서 HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/2를 보고합니다. Out-of-Process 배포에서 HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/1.1을 보고합니다.

In-process 및 out-of-process 호스팅 모델에 대한 자세한 내용은 ASP.NET Core 모듈을 참조하세요.

HTTP/2는 HTTPS/TLS 연결에서 기본적으로 사용됩니다. HTTP/2 연결이 설정되지 않은 경우 연결이 HTTP/1.1로 대체됩니다. IIS 배포가 포함된 HTTP/2 구성에 대한 자세한 내용은 IIS의 HTTP/2를 참조하세요.

gRPC를 지원하기 위한 고급 HTTP/2 기능

IIS의 추가 HTTP/2 기능은 응답 트레일러 및 초기화 프레임 전송을 위한 지원을 포함하여 gRPC를 지원합니다.

IIS에서 gRPC를 실행하기 위한 요구 사항:

  • In Process 호스팅.
  • Windows 10, OS 빌드 20300.1000 이상. Windows 참가자 빌드를 사용해야 할 수 있습니다.
  • TLS 1.2 이상 연결

트레일러

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는 트레일러를 추가합니다.

다시 설정

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

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

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