학습
모듈
Visual Studio 사용하여 Azure App Service에서 호스트되는 ASP.NET Core 앱을 원격으로 디버그 - Training
직접 Visual Studio 2022를 사용하여 Azure App Service에서 ASP.NET Core 앱을 배포하고 원격으로 디버그하는 방법을 실습합니다.
참고
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.
중요
이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.
현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.
Kestrel 웹 서버에는 인터넷 연결 배포에 특히 유용한 제약 조건 구성 옵션이 있습니다. Kestrel 구성 옵션을 구성하려면 Program.cs
에서 ConfigureKestrel을 호출합니다.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(serverOptions =>
{
// ...
});
KestrelServerOptions.Limits 속성에서 제약 조건을 설정합니다. 이 속성은 KestrelServerLimits 클래스의 인스턴스를 보유합니다.
KeepAliveTimeout은 keep-alive 시간 제한을 가져오거나 설정합니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(2);
});
이 시간 제한은 디버거가 프로세스에 Kestrel 연결된 경우 적용되지 않습니다.
MaxConcurrentConnections는 최대 열린 연결 수를 가져오거나 설정합니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentConnections = 100;
});
MaxConcurrentUpgradedConnections는 최대 열린, 업그레이드된 연결 수를 가져오거나 설정합니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
});
업그레이드된 연결은 HTTP에서 WebSocket과 같은 다른 프로토콜로 전환된 연결입니다. 연결이 업그레이드된 후 MaxConcurrentConnections
제한에 대해 계산되지 않습니다.
MaxRequestBodySize는 요청 본문에 대해 허용되는 최대 크기(바이트)를 가져오거나 설정합니다.
ASP.NET Core MVC 앱에서 한도를 재정의할 때는 작업 메서드에서 RequestSizeLimitAttribute 특성을 사용하는 방법이 좋습니다.
[RequestSizeLimit(100_000_000)]
public IActionResult Get()
다음 예제에서는 모든 요청에 대해 MaxRequestBodySize
를 구성합니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxRequestBodySize = 100_000_000;
});
다음 예제에서는 사용자 지정 미들웨어에서 IHttpMaxRequestBodySizeFeature를 사용하여 특정 요청에 대한 MaxRequestBodySize
를 구성합니다.
app.Use(async (context, next) =>
{
var httpMaxRequestBodySizeFeature = context.Features.Get<IHttpMaxRequestBodySizeFeature>();
if (httpMaxRequestBodySizeFeature is not null)
httpMaxRequestBodySizeFeature.MaxRequestBodySize = 10 * 1024;
// ...
await next(context);
});
요청을 읽기 시작한 후 앱에서 요청에 대한 제한을 구성하려고 하면 예외가 throw됩니다. IHttpMaxRequestBodySizeFeature.IsReadOnly 속성을 사용하여 MaxRequestBodySize
속성을 설정해도 안전한지 확인합니다.
앱이 ASP.NET Core 모듈 뒤에서 Out of Process로 실행되는 경우 IIS는 제한을 설정하고 Kestrel의 요청 본문 크기 제한이 사용되지 않습니다.
Kestrel은 데이터가 지정된 속도(바이트/초)로 도착하는지 1초마다 확인합니다. 속도가 최소 아래로 떨어지면 연결이 시간 초과됩니다. 유예 기간은 Kestrel에서 클라이언트가 전송 속도를 최소로 높일 수 있는 시간입니다. 이 기간에는 속도가 확인되지 않습니다. 유예 기간은 TCP 느린 시작으로 인해 느린 속도로 처음에 데이터를 보내는 연결 중단을 방지하는 데 도움이 됩니다. 최소 속도는 응답에도 적용됩니다.
MinRequestBodyDataRate는 요청 본문 최소 데이터 속도(바이트/초)를 가져오거나 설정합니다. MinResponseDataRate는 응답 본문 최소 데이터 속도(바이트/초)를 가져오거나 설정합니다.
다음 예제에서는 모든 요청에 대해 MinRequestBodyDataRate
및 MinResponseDataRate
를 구성합니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MinRequestBodyDataRate = new MinDataRate(
bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Limits.MinResponseDataRate = new MinDataRate(
bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
});
다음 예제에서는 사용자 지정 미들웨어에서 IHttpMinRequestBodyDataRateFeature 및 IHttpMinResponseDataRateFeature를 사용하여 특정 요청에 대한 MinRequestBodyDataRate
및 MinResponseDataRate
를 구성합니다.
app.Use(async (context, next) =>
{
var httpMinRequestBodyDataRateFeature = context.Features
.Get<IHttpMinRequestBodyDataRateFeature>();
if (httpMinRequestBodyDataRateFeature is not null)
{
httpMinRequestBodyDataRateFeature.MinDataRate = new MinDataRate(
bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
}
var httpMinResponseDataRateFeature = context.Features
.Get<IHttpMinResponseDataRateFeature>();
if (httpMinResponseDataRateFeature is not null)
{
httpMinResponseDataRateFeature.MinDataRate = new MinDataRate(
bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
}
// ...
await next(context);
});
IHttpMinResponseDataRateFeature
는 HTTP/2 요청에 대한 HttpContext.Features에 없습니다. 프로토콜의 요청 멀티플렉싱 지원 때문에 HTTP/2의 경우 일반적으로 각 요청을 기준으로 속도 제한을 수정할 수 없습니다. 그러나 HTTP/2 요청에 대해서도 IHttpMinResponseDataRateFeature.MinDataRate를 null
로 설정하여 요청별 읽기 속도 제한을 완전히 비활성화할 수 있으므로 HTTP/2 요청에 대한 IHttpMinRequestBodyDataRateFeature
는 여전히 존재합니다HttpContext.Features
. IHttpMinRequestBodyDataRateFeature.MinDataRate
를 읽으려는 시도나 null
이외의 값으로 설정하려는 시도로 인해 HTTP/2 요청에 대한 NotSupportedException이 발생합니다.
KestrelServerOptions.Limits를 통해 구성된 서버 전체 속도 제한은 여전히 HTTP/1.x 및 HTTP/2 연결 모두에 적용됩니다.
RequestHeadersTimeout은 서버가 요청 헤더를 수신하는 데 걸리는 최대 시간을 가져오거나 설정합니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(1);
});
이 시간 제한은 디버거가 프로세스에 Kestrel 연결된 경우 적용되지 않습니다.
이 섹션의 제한은 KestrelServerLimits.Http2에 설정되어 있습니다.
MaxStreamsPerConnection은 HTTP/2 연결당 동시 요청 스트림 수를 제한합니다. 초과 스트림은 거부됩니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.MaxStreamsPerConnection = 100;
});
HeaderTableSize는 서버의 HPACK 인코더 및 디코더에서 사용할 수 있는 헤더 압축 테이블의 크기(8진수)를 제한합니다. HPACK 디코더는 HTTP/2 연결에 대한 HTTP 헤더의 압축을 풉니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.HeaderTableSize = 4096;
});
MaxFrameSize는 수신이 허용된 가장 큰 프레임 페이로드의 크기(8진수)를 나타냅니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.MaxFrameSize = 16_384;
});
MaxRequestHeaderFieldSize는 요청 헤더 필드 시퀀스의 허용되는 최대 크기를 나타냅니다. 이 한도는 모두 압축된 표현과 압축되지 않은 표현으로 이름과 값 시퀀스 모두에 적용됩니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.MaxRequestHeaderFieldSize = 8192;
});
InitialConnectionWindowSize는 서버가 수신하려는 요청 본문 데이터와 연결당 모든 요청(스트림)에 걸쳐 한 번에 집계된 버퍼의 크기를 나타냅니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.InitialConnectionWindowSize = 131_072;
});
요청은 InitialStreamWindowSize
에 의해서도 제한됩니다.
InitialStreamWindowSize는 서버가 수신하려는 요청 본문 데이터와 연결당 스트림당 버퍼의 크기를 나타냅니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.InitialStreamWindowSize = 98_304;
});
요청은 InitialConnectionWindowSize
에 의해서도 제한됩니다.
연결된 클라이언트로 HTTP/2 ping을 보내도록 Kestrel을 구성할 수 있습니다. HTTP/2 ping은 여러 가지 용도로 사용됩니다.
HTTP/2 연결 유지 ping과 관련된 두 가지 구성 옵션이 있습니다.
다음 예제에서는 KeepAlivePingDelay
를 KeepAlivePingTimeout
으로 설정합니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(30);
serverOptions.Limits.Http2.KeepAlivePingTimeout = TimeSpan.FromMinutes(1);
});
AllowSynchronousIO는 요청 및 응답에 대해 동기 I/O가 허용되는지 여부를 제어합니다.
경고
차단 동기 I/O 작업 수가 많으면 스레드 풀이 고갈되어 앱이 응답하지 않게 될 수 있습니다. 비동기 I/O를 지원하지 않는 라이브러리를 사용할 때만 AllowSynchronousIO
를 사용하도록 설정하세요.
다음 예제에서는 동기 I/O를 사용하도록 설정합니다.
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.AllowSynchronousIO = true;
});
다른 Kestrel 옵션 및 제한에 대한 정보는 다음을 참조하세요.
특정 시간 제한 및 속도 제한은 디버거가 프로세스에 Kestrel 연결된 경우 적용되지 않습니다. 자세한 내용은 디버거가 연결된 동작을 참조하세요.
Kestrel 웹 서버에는 인터넷 연결 배포에 특히 유용한 제약 조건 구성 옵션이 있습니다.
ConfigureWebHostDefaults를 호출한 후 추가 구성을 제공하려면 ConfigureKestrel을 사용합니다.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(serverOptions =>
{
// Set properties and call methods on options
})
.UseStartup<Startup>();
});
KestrelServerOptions 클래스의 Limits 속성에서 제약 조건을 설정합니다. Limits
속성은 KestrelServerLimits 클래스의 인스턴스를 보유합니다.
다음 예제에서는 Microsoft.AspNetCore.Server.Kestrel.Core 네임스페이스를 사용합니다.
using Microsoft.AspNetCore.Server.Kestrel.Core;
참고
KestrelServerOptions 및 엔드포인트 구성은 구성 공급자에서 구성할 수 있습니다. 나머지 Kestrel 구성은 C# 코드로 구성해야 합니다.
keep-alive 시간 제한을 가져오거나 설정합니다. 기본값은 2분입니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentConnections = 100;
serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
serverOptions.Limits.MinRequestBodyDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Limits.MinResponseDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Listen(IPAddress.Loopback, 5000);
serverOptions.Listen(IPAddress.Loopback, 5001,
listenOptions =>
{
listenOptions.UseHttps("testCert.pfx",
"testPassword");
});
serverOptions.Limits.KeepAliveTimeout =
TimeSpan.FromMinutes(2);
serverOptions.Limits.RequestHeadersTimeout =
TimeSpan.FromMinutes(1);
})
MaxConcurrentConnections
MaxConcurrentUpgradedConnections
다음 코드를 사용하여 전체 앱에 대한 동시 개방 TCP 연결의 최대 수를 설정할 수 있습니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentConnections = 100;
serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
serverOptions.Limits.MinRequestBodyDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Limits.MinResponseDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Listen(IPAddress.Loopback, 5000);
serverOptions.Listen(IPAddress.Loopback, 5001,
listenOptions =>
{
listenOptions.UseHttps("testCert.pfx",
"testPassword");
});
serverOptions.Limits.KeepAliveTimeout =
TimeSpan.FromMinutes(2);
serverOptions.Limits.RequestHeadersTimeout =
TimeSpan.FromMinutes(1);
})
HTTP 또는 HTTPS에서 다른 프로토콜(예: WebSocket 요청에서)로 업그레이드된 연결에 대한 별도 제한이 있습니다. 연결이 업그레이드된 후 MaxConcurrentConnections
제한에 대해 계산되지 않습니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentConnections = 100;
serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
serverOptions.Limits.MinRequestBodyDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Limits.MinResponseDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Listen(IPAddress.Loopback, 5000);
serverOptions.Listen(IPAddress.Loopback, 5001,
listenOptions =>
{
listenOptions.UseHttps("testCert.pfx",
"testPassword");
});
serverOptions.Limits.KeepAliveTimeout =
TimeSpan.FromMinutes(2);
serverOptions.Limits.RequestHeadersTimeout =
TimeSpan.FromMinutes(1);
})
연결의 최대 수는 기본적으로 무제한(null)입니다.
기본 최대 요청 본문 크기는 약 28.6MB인 30,000,000바이트입니다.
ASP.NET Core MVC 앱에서 한도를 재정의할 때는 작업 메서드에서 RequestSizeLimitAttribute 특성을 사용하는 방법이 좋습니다.
[RequestSizeLimit(100000000)]
public IActionResult MyActionMethod()
다음 예제는 모든 요청에서 앱에 대한 제약 조건을 구성하는 방법을 보여 줍니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentConnections = 100;
serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
serverOptions.Limits.MinRequestBodyDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Limits.MinResponseDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Listen(IPAddress.Loopback, 5000);
serverOptions.Listen(IPAddress.Loopback, 5001,
listenOptions =>
{
listenOptions.UseHttps("testCert.pfx",
"testPassword");
});
serverOptions.Limits.KeepAliveTimeout =
TimeSpan.FromMinutes(2);
serverOptions.Limits.RequestHeadersTimeout =
TimeSpan.FromMinutes(1);
})
미들웨어에서 특정 요청에 대한 설정을 재정의합니다.
app.Run(async (context) =>
{
context.Features.Get<IHttpMaxRequestBodySizeFeature>()
.MaxRequestBodySize = 10 * 1024;
var minRequestRateFeature =
context.Features.Get<IHttpMinRequestBodyDataRateFeature>();
var minResponseRateFeature =
context.Features.Get<IHttpMinResponseDataRateFeature>();
if (minRequestRateFeature != null)
{
minRequestRateFeature.MinDataRate = new MinDataRate(
bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
}
if (minResponseRateFeature != null)
{
minResponseRateFeature.MinDataRate = new MinDataRate(
bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
}
앱에서 요청을 읽기 시작한 후 요청에 대한 제한을 구성하는 경우 예외가 throw됩니다. MaxRequestBodySize
속성이 제한을 구성하기에 너무 늦은, 읽기 전용 상태인지를 알려주는 IsReadOnly
속성이 있습니다.
앱이 ASP.NET Core 모듈 뒤에서 Out of Process로 실행되는 경우 Kestrel의 요청 본문 크기 제한이 사용되지 않습니다. IIS는 이미 제한을 설정했습니다.
MinRequestBodyDataRate
MinResponseDataRate
Kestrel은 데이터가 지정된 속도(바이트/초)로 도착하는지 1초마다 확인합니다. 속도가 최소 아래로 떨어지면 연결이 시간 초과됩니다. 유예 기간은 Kestrel에서 클라이언트가 전송 속도를 최소로 높일 수 있는 시간입니다. 이 기간에는 속도가 확인되지 않습니다. 유예 기간은 TCP 느린 시작으로 인해 느린 속도로 처음에 데이터를 보내는 연결 중단을 방지하는 데 도움이 됩니다.
기본 최소 속도는 5초의 유예 기간으로 240바이트/초입니다.
최소 속도는 응답에도 적용됩니다. 요청 제한 및 응답 제한을 설정하는 코드는 속성 및 인터페이스 이름에 RequestBody
또는 Response
를 갖는 것을 제외하고 동일합니다.
다음은 다음에서 최소 데이터 속도를 구성하는 방법을 보여 주는 예제입니다.Program.cs
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentConnections = 100;
serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
serverOptions.Limits.MinRequestBodyDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Limits.MinResponseDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Listen(IPAddress.Loopback, 5000);
serverOptions.Listen(IPAddress.Loopback, 5001,
listenOptions =>
{
listenOptions.UseHttps("testCert.pfx",
"testPassword");
});
serverOptions.Limits.KeepAliveTimeout =
TimeSpan.FromMinutes(2);
serverOptions.Limits.RequestHeadersTimeout =
TimeSpan.FromMinutes(1);
})
미들웨어에서 요청당 최소 속도 제한을 재정의합니다.
app.Run(async (context) =>
{
context.Features.Get<IHttpMaxRequestBodySizeFeature>()
.MaxRequestBodySize = 10 * 1024;
var minRequestRateFeature =
context.Features.Get<IHttpMinRequestBodyDataRateFeature>();
var minResponseRateFeature =
context.Features.Get<IHttpMinResponseDataRateFeature>();
if (minRequestRateFeature != null)
{
minRequestRateFeature.MinDataRate = new MinDataRate(
bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
}
if (minResponseRateFeature != null)
{
minResponseRateFeature.MinDataRate = new MinDataRate(
bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
}
이전 샘플에서 참조하는 IHttpMinResponseDataRateFeature는 HTTP/2 요청의 HttpContext.Features에 없습니다. 프로토콜의 요청 멀티플렉싱 지원 때문에 HTTP/2의 경우 일반적으로 각 요청을 기준으로 속도 제한을 수정할 수 없습니다. 그러나 HTTP/2 요청에 대해서도 IHttpMinResponseDataRateFeature.MinDataRate를 null
로 설정하여 요청별 읽기 속도 제한을 완전히 비활성화할 수 있으므로 HTTP/2 요청에 대한 IHttpMinRequestBodyDataRateFeature는 여전히 존재합니다HttpContext.Features
. IHttpMinRequestBodyDataRateFeature.MinDataRate
읽기를 시도하거나 null
이 아닌 값으로 설정하려고 하면 HTTP/2 요청이 있을 때 NotSupportedException이 throw됩니다.
KestrelServerOptions.Limits를 통해 구성된 서버 전체 속도 제한은 여전히 HTTP/1.x 및 HTTP/2 연결 모두에 적용됩니다.
서버가 요청 헤더를 수신하는 데 걸리는 최대 시간을 가져오거나 설정합니다. 기본값은 30초입니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentConnections = 100;
serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
serverOptions.Limits.MinRequestBodyDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Limits.MinResponseDataRate =
new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Listen(IPAddress.Loopback, 5000);
serverOptions.Listen(IPAddress.Loopback, 5001,
listenOptions =>
{
listenOptions.UseHttps("testCert.pfx",
"testPassword");
});
serverOptions.Limits.KeepAliveTimeout =
TimeSpan.FromMinutes(2);
serverOptions.Limits.RequestHeadersTimeout =
TimeSpan.FromMinutes(1);
})
이 섹션의 제한은 KestrelServerLimits.Http2에 설정되어 있습니다.
HTTP/2 연결당 동시 요청 스트림 수를 제한합니다. 초과 스트림은 거부됩니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.MaxStreamsPerConnection = 100;
});
기본값은 100입니다.
HPACK 디코더는 HTTP/2 연결에 대한 HTTP 헤더의 압축을 풉니다. HeaderTableSize
는 HPACK 디코더가 사용하는 헤더 압축 테이블의 크기를 제한합니다. 값은 8진수로 제공되며 영(0)보다 커야 합니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.HeaderTableSize = 4096;
});
기본값은 4096입니다.
서버에서 받거나 보낸 HTTP/2 연결 프레임 페이로드의 최대 허용 크기를 나타냅니다. 값은 8진수로 제공되며 2^14(16,384)와 2^24-1(16,777,215) 사이여야 합니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.MaxFrameSize = 16384;
});
기본값은 2^14(16,384)입니다.
요청 헤더 값의 8진수로 허용되는 최대 크기를 나타냅니다. 이 한도는 모두 압축된 표현과 압축되지 않은 표현으로 이름과 값 모두에 적용됩니다. 값은 0보다 커야 합니다(0).
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.MaxRequestHeaderFieldSize = 8192;
});
기본값은 8,192입니다.
연결당 모든 요청(스트림)을 통해 한 번에 집계하는 서버 버퍼의 최대 요청 본문 데이터를 바이트 단위로 나타냅니다. 요청은 Http2.InitialStreamWindowSize
에 의해서도 제한됩니다. 값은 65,535보다 크거나 같아야 하며 2^31(2,147,483,648)보다 작아야 합니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.InitialConnectionWindowSize = 131072;
});
기본값은 128KB(131,072)입니다.
요청(스트림)당 한 번에 서버 버퍼의 최대 요청 본문 데이터를 바이트 단위로 나타냅니다. 요청은 InitialConnectionWindowSize
에 의해서도 제한됩니다. 값은 65,535보다 크거나 같아야 하며 2^31(2,147,483,648)보다 작아야 합니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.InitialStreamWindowSize = 98304;
});
기본값은 96KB(98,304)입니다.
연결된 클라이언트로 HTTP/2 ping을 보내도록 Kestrel을 구성할 수 있습니다. HTTP/2 ping은 여러 가지 용도로 사용됩니다.
HTTP/2 연결 유지 ping과 관련된 두 가지 구성 옵션이 있습니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(30);
serverOptions.Limits.Http2.KeepAlivePingTimeout = TimeSpan.FromSeconds(60);
});
AllowSynchronousIO는 요청 및 응답에 대해 동기 I/O가 허용되는지 여부를 제어합니다. 기본값은 false
입니다.
경고
차단 동기 I/O 작업 수가 많으면 스레드 풀이 고갈되어 앱이 응답하지 않게 될 수 있습니다. 비동기 I/O를 지원하지 않는 라이브러리를 사용할 때만 AllowSynchronousIO
를 사용하도록 설정하세요.
다음 예제에서는 동기 I/O를 사용하도록 설정합니다.
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.AllowSynchronousIO = true;
})
다른 Kestrel 옵션 및 제한에 대한 정보는 다음을 참조하세요.
ASP.NET Core 피드백
ASP.NET Core은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.
학습
모듈
Visual Studio 사용하여 Azure App Service에서 호스트되는 ASP.NET Core 앱을 원격으로 디버그 - Training
직접 Visual Studio 2022를 사용하여 Azure App Service에서 ASP.NET Core 앱을 배포하고 원격으로 디버그하는 방법을 실습합니다.
설명서
ASP.NET Core Kestrel 웹 서버의 엔드포인트 구성
ASP.NET Core의 플랫폼 간 웹 서버인 Kestrel을 사용하여 엔드포인트를 구성하는 방법에 관해 알아봅니다.
Kestrel에서 진단을 수집하는 방법을 알아보세요.
ASP.NET Core Kestrel 웹 서버를 사용한 호스트 필터링
ASP.NET Core의 플랫폼 간 웹 서버인 Kestrel에서 호스트 필터링을 사용하는 방법을 알아봅니다.