More detailed request timeout exceptions #2245

This commit is contained in:
Chris Ross (ASP.NET) 2018-03-02 10:51:48 -08:00
parent 49cd0ef97f
commit 42fbba3520
6 changed files with 48 additions and 21 deletions

View File

@ -87,8 +87,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
case RequestRejectionReason.RequestBodyTooLarge:
ex = new BadHttpRequestException(CoreStrings.BadRequest_RequestBodyTooLarge, StatusCodes.Status413PayloadTooLarge);
break;
case RequestRejectionReason.RequestTimeout:
ex = new BadHttpRequestException(CoreStrings.BadRequest_RequestTimeout, StatusCodes.Status408RequestTimeout);
case RequestRejectionReason.RequestHeadersTimeout:
ex = new BadHttpRequestException(CoreStrings.BadRequest_RequestHeadersTimeout, StatusCodes.Status408RequestTimeout);
break;
case RequestRejectionReason.RequestBodyTimeout:
ex = new BadHttpRequestException(CoreStrings.BadRequest_RequestBodyTimeout, StatusCodes.Status408RequestTimeout);
break;
case RequestRejectionReason.OptionsMethodRequired:
ex = new BadHttpRequestException(CoreStrings.BadRequest_MethodNotAllowed, StatusCodes.Status405MethodNotAllowed, HttpMethod.Options);

View File

@ -186,8 +186,8 @@
<data name="BadRequest_RequestLineTooLong" xml:space="preserve">
<value>Request line too long.</value>
</data>
<data name="BadRequest_RequestTimeout" xml:space="preserve">
<value>Request timed out.</value>
<data name="BadRequest_RequestHeadersTimeout" xml:space="preserve">
<value>Reading the request headers timed out.</value>
</data>
<data name="BadRequest_TooManyHeaders" xml:space="preserve">
<value>Request contains too many headers.</value>
@ -503,4 +503,7 @@ For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?l
<data name="WritingToResponseBodyAfterResponseCompleted" xml:space="preserve">
<value>Cannot write to the response body, the response has completed.</value>
</data>
<data name="BadRequest_RequestBodyTimeout" xml:space="preserve">
<value>Reading the request body timed out due to data arriving too slowly. See MinRequestBodyDataRate.</value>
</data>
</root>

View File

@ -484,7 +484,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
{
// In this case, there is an ongoing request but the start line/header parsing has timed out, so send
// a 408 response.
BadHttpRequestException.Throw(RequestRejectionReason.RequestTimeout);
BadHttpRequestException.Throw(RequestRejectionReason.RequestHeadersTimeout);
}
endConnection = false;

View File

@ -47,7 +47,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
if (_context.RequestTimedOut)
{
BadHttpRequestException.Throw(RequestRejectionReason.RequestTimeout);
BadHttpRequestException.Throw(RequestRejectionReason.RequestBodyTimeout);
}
var readableBuffer = result.Buffer;

View File

@ -22,7 +22,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
HeadersExceedMaxTotalSize,
TooManyHeaders,
RequestBodyTooLarge,
RequestTimeout,
RequestHeadersTimeout,
RequestBodyTimeout,
FinalTransferCodingNotChunked,
LengthRequired,
LengthRequiredHttp10,

View File

@ -333,18 +333,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
=> GetString("BadRequest_RequestLineTooLong");
/// <summary>
/// Request timed out.
/// Reading the request headers timed out.
/// </summary>
internal static string BadRequest_RequestTimeout
internal static string BadRequest_RequestHeadersTimeout
{
get => GetString("BadRequest_RequestTimeout");
get => GetString("BadRequest_RequestHeadersTimeout");
}
/// <summary>
/// Request timed out.
/// Reading the request headers timed out.
/// </summary>
internal static string FormatBadRequest_RequestTimeout()
=> GetString("BadRequest_RequestTimeout");
internal static string FormatBadRequest_RequestHeadersTimeout()
=> GetString("BadRequest_RequestHeadersTimeout");
/// <summary>
/// Request contains too many headers.
@ -878,14 +878,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
internal static string FormatWritingToResponseBodyNotSupported(object statusCode)
=> string.Format(CultureInfo.CurrentCulture, GetString("WritingToResponseBodyNotSupported", "statusCode"), statusCode);
/// <summary>
/// Cannot write to the response body, the response has completed.
/// </summary>
internal static string WritingToResponseBodyAfterResponseCompleted
{
get => GetString("WritingToResponseBodyAfterResponseCompleted");
}
/// <summary>
/// Connection shutdown abnormally.
/// </summary>
@ -1800,6 +1792,34 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
internal static string FormatHttp2NotSupported()
=> GetString("Http2NotSupported");
/// <summary>
/// Cannot write to the response body, the response has completed.
/// </summary>
internal static string WritingToResponseBodyAfterResponseCompleted
{
get => GetString("WritingToResponseBodyAfterResponseCompleted");
}
/// <summary>
/// Cannot write to the response body, the response has completed.
/// </summary>
internal static string FormatWritingToResponseBodyAfterResponseCompleted()
=> GetString("WritingToResponseBodyAfterResponseCompleted");
/// <summary>
/// Reading the request body timed out due to data arriving too slowly. See MinRequestBodyDataRate.
/// </summary>
internal static string BadRequest_RequestBodyTimeout
{
get => GetString("BadRequest_RequestBodyTimeout");
}
/// <summary>
/// Reading the request body timed out due to data arriving too slowly. See MinRequestBodyDataRate.
/// </summary>
internal static string FormatBadRequest_RequestBodyTimeout()
=> GetString("BadRequest_RequestBodyTimeout");
private static string GetString(string name, params string[] formatterNames)
{
var value = _resourceManager.GetString(name);