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: case RequestRejectionReason.RequestBodyTooLarge:
ex = new BadHttpRequestException(CoreStrings.BadRequest_RequestBodyTooLarge, StatusCodes.Status413PayloadTooLarge); ex = new BadHttpRequestException(CoreStrings.BadRequest_RequestBodyTooLarge, StatusCodes.Status413PayloadTooLarge);
break; break;
case RequestRejectionReason.RequestTimeout: case RequestRejectionReason.RequestHeadersTimeout:
ex = new BadHttpRequestException(CoreStrings.BadRequest_RequestTimeout, StatusCodes.Status408RequestTimeout); ex = new BadHttpRequestException(CoreStrings.BadRequest_RequestHeadersTimeout, StatusCodes.Status408RequestTimeout);
break;
case RequestRejectionReason.RequestBodyTimeout:
ex = new BadHttpRequestException(CoreStrings.BadRequest_RequestBodyTimeout, StatusCodes.Status408RequestTimeout);
break; break;
case RequestRejectionReason.OptionsMethodRequired: case RequestRejectionReason.OptionsMethodRequired:
ex = new BadHttpRequestException(CoreStrings.BadRequest_MethodNotAllowed, StatusCodes.Status405MethodNotAllowed, HttpMethod.Options); ex = new BadHttpRequestException(CoreStrings.BadRequest_MethodNotAllowed, StatusCodes.Status405MethodNotAllowed, HttpMethod.Options);

View File

@ -186,8 +186,8 @@
<data name="BadRequest_RequestLineTooLong" xml:space="preserve"> <data name="BadRequest_RequestLineTooLong" xml:space="preserve">
<value>Request line too long.</value> <value>Request line too long.</value>
</data> </data>
<data name="BadRequest_RequestTimeout" xml:space="preserve"> <data name="BadRequest_RequestHeadersTimeout" xml:space="preserve">
<value>Request timed out.</value> <value>Reading the request headers timed out.</value>
</data> </data>
<data name="BadRequest_TooManyHeaders" xml:space="preserve"> <data name="BadRequest_TooManyHeaders" xml:space="preserve">
<value>Request contains too many headers.</value> <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"> <data name="WritingToResponseBodyAfterResponseCompleted" xml:space="preserve">
<value>Cannot write to the response body, the response has completed.</value> <value>Cannot write to the response body, the response has completed.</value>
</data> </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> </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 // In this case, there is an ongoing request but the start line/header parsing has timed out, so send
// a 408 response. // a 408 response.
BadHttpRequestException.Throw(RequestRejectionReason.RequestTimeout); BadHttpRequestException.Throw(RequestRejectionReason.RequestHeadersTimeout);
} }
endConnection = false; endConnection = false;

View File

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

View File

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

View File

@ -333,18 +333,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
=> GetString("BadRequest_RequestLineTooLong"); => GetString("BadRequest_RequestLineTooLong");
/// <summary> /// <summary>
/// Request timed out. /// Reading the request headers timed out.
/// </summary> /// </summary>
internal static string BadRequest_RequestTimeout internal static string BadRequest_RequestHeadersTimeout
{ {
get => GetString("BadRequest_RequestTimeout"); get => GetString("BadRequest_RequestHeadersTimeout");
} }
/// <summary> /// <summary>
/// Request timed out. /// Reading the request headers timed out.
/// </summary> /// </summary>
internal static string FormatBadRequest_RequestTimeout() internal static string FormatBadRequest_RequestHeadersTimeout()
=> GetString("BadRequest_RequestTimeout"); => GetString("BadRequest_RequestHeadersTimeout");
/// <summary> /// <summary>
/// Request contains too many headers. /// Request contains too many headers.
@ -878,14 +878,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
internal static string FormatWritingToResponseBodyNotSupported(object statusCode) internal static string FormatWritingToResponseBodyNotSupported(object statusCode)
=> string.Format(CultureInfo.CurrentCulture, GetString("WritingToResponseBodyNotSupported", "statusCode"), 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> /// <summary>
/// Connection shutdown abnormally. /// Connection shutdown abnormally.
/// </summary> /// </summary>
@ -1800,6 +1792,34 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
internal static string FormatHttp2NotSupported() internal static string FormatHttp2NotSupported()
=> GetString("Http2NotSupported"); => 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) private static string GetString(string name, params string[] formatterNames)
{ {
var value = _resourceManager.GetString(name); var value = _resourceManager.GetString(name);