diff --git a/docs/dotnet/dotnet-kestrel-metrics.md b/docs/dotnet/dotnet-kestrel-metrics.md index c5e53fa7e1..ad9f12cd0d 100644 --- a/docs/dotnet/dotnet-kestrel-metrics.md +++ b/docs/dotnet/dotnet-kestrel-metrics.md @@ -125,14 +125,14 @@ the following errors types when a corresponding error occurs: | `app_shutdown_timeout` | The connection was aborted during app shutdown. During shutdown, the server stops accepting new connections and HTTP requests, and it is given time for active requests to complete. If the app shutdown timeout is exceeded, all remaining connections are aborted. | | `closed_critical_stream` | A critical control stream for an HTTP/3 connection was closed. | | `connection_reset` | The connection was reset while there were active HTTP/2 or HTTP/3 streams on the connection. | -| `error_after_starting_response` | An error occurred after the response was started, causing an abort of the HTTP/1.1 connection or multiplexed request stream. | +| `error_after_starting_response` | An error such as an unhandled application exception or invalid request body occurred after the response was started, causing an abort of the HTTP/1.1 connection. | | `error_reading_headers` | An error occurred when decoding HPACK headers in an HTTP/2 `HEADERS` frame. | | `error_writing_headers` | An error occurred when encoding HPACK headers in an HTTP/2 `HEADERS` frame. | | `flow_control_queue_size_exceeded` | The connection exceeded the outgoing flow control maximum queue size and was closed with `INTERNAL_ERROR`. This can be caused by an excessive number of HTTP/2 stream resets. For more information, see [Microsoft Security Advisory CVE-2023-44487](https://github.com/dotnet/runtime/issues/93303). | | `flow_control_window_exceeded` | The client sent more data than allowed by the current flow-control window. | | `frame_after_stream_close` | An HTTP/2 frame was received on a closed stream. | | `insufficient_tls_version` | The connection doesn't have TLS 1.2 or greater, as required by HTTP/2. | -| `invalid_body_reader_state` | An error occurred when draining the request body, aborting the HTTP/1.1 connection. | +| `invalid_body_reader_state` | An error occurred when draining the request body, aborting the HTTP/1.1 connection. This could be caused by app code reading the request body and missing a call to `PipeReader.AdvanceTo` in a finally block. | | `invalid_data_padding` | An HTTP/2 `HEADER` or `DATA` frame has an invalid amount of padding. | | `invalid_frame_length` | An HTTP/2 frame was received with an invalid frame payload length. The frame could contain a payload that is not valid for the type, or a `DATA` frame payload does not match the length specified in the frame header. | | `invalid_handshake` | An invalid HTTP/2 handshake was received. | @@ -142,7 +142,7 @@ the following errors types when a corresponding error occurs: | `invalid_settings` | The connection received an HTTP/2 or HTTP/3 `SETTINGS` frame with invalid settings. | | `invalid_stream_id` | An HTTP/2 stream with an invalid stream ID was received. | | `invalid_window_update_size` | The server received an HTTP/2 `WINDOW_UPDATE` frame with a zero increment, or an increment that caused a flow-control window to exceed the maximum size. | -| `io_error` | An `IOException` occurred while reading or writing connection data. | +| `io_error` | An `IOException` occurred while reading or writing HTTP/2 or HTTP/3 connection data. | | `keep_alive_timeout` | There was no activity on the connection, and the keep-alive timeout configured by `KestrelServerLimits.KeepAliveTimeout` was exceeded. | | `max_concurrent_connections_exceeded` | The connection exceeded the maximum concurrent connection limit. Configured by `KestrelServerLimits.MaxConcurrentConnections`. | | `max_frame_length_exceeded` | The connection received an HTTP/2 frame that exceeded the size limit specified by `Http2Limits.MaxFrameSize`. | @@ -161,7 +161,7 @@ the following errors types when a corresponding error occurs: | `stream_self_dependency` | The connection received an HTTP/2 frame that caused a frame to depend on itself. | | `tls_handshake_failed` | An error occurred during the TLS handshake for a connection. Only reported for HTTP/1.1 and HTTP/2 connections. The TLS handshake for HTTP/3 is internal to QUIC transport. | ![Experimental](https://img.shields.io/badge/-experimental-blue) | | `tls_not_supported` | A TLS handshake was received by an endpoint that isn't configured to support TLS. | -| `unexpected_end_of_request_content` | The HTTP request body ended before the data specified by `content-length` was received. | +| `unexpected_end_of_request_content` | The HTTP/1.1 request body ended before the data specified by the `content-length` header or chunked transfer encoding mechanism was received. | | `unexpected_frame` | An unexpected HTTP/2 or HTTP/3 frame type was received. The frame type is either unknown, unsupported, or invalid for the current stream state. | | `unknown_stream` | An HTTP/2 frame was received on an unknown stream. | | `write_canceled` | The cancellation of a response body write aborted the HTTP/1.1 connection. | diff --git a/model/kestrel/metrics.yaml b/model/kestrel/metrics.yaml index 4bc6acf49a..0096b63970 100644 --- a/model/kestrel/metrics.yaml +++ b/model/kestrel/metrics.yaml @@ -56,14 +56,14 @@ groups: | `app_shutdown_timeout` | The connection was aborted during app shutdown. During shutdown, the server stops accepting new connections and HTTP requests, and it is given time for active requests to complete. If the app shutdown timeout is exceeded, all remaining connections are aborted. | | `closed_critical_stream` | A critical control stream for an HTTP/3 connection was closed. | | `connection_reset` | The connection was reset while there were active HTTP/2 or HTTP/3 streams on the connection. | - | `error_after_starting_response` | An error occurred after the response was started, causing an abort of the HTTP/1.1 connection or multiplexed request stream. | + | `error_after_starting_response` | An error such as an unhandled application exception or invalid request body occurred after the response was started, causing an abort of the HTTP/1.1 connection. | | `error_reading_headers` | An error occurred when decoding HPACK headers in an HTTP/2 `HEADERS` frame. | | `error_writing_headers` | An error occurred when encoding HPACK headers in an HTTP/2 `HEADERS` frame. | | `flow_control_queue_size_exceeded` | The connection exceeded the outgoing flow control maximum queue size and was closed with `INTERNAL_ERROR`. This can be caused by an excessive number of HTTP/2 stream resets. For more information, see [Microsoft Security Advisory CVE-2023-44487](https://github.com/dotnet/runtime/issues/93303). | | `flow_control_window_exceeded` | The client sent more data than allowed by the current flow-control window. | | `frame_after_stream_close` | An HTTP/2 frame was received on a closed stream. | | `insufficient_tls_version` | The connection doesn't have TLS 1.2 or greater, as required by HTTP/2. | - | `invalid_body_reader_state` | An error occurred when draining the request body, aborting the HTTP/1.1 connection. | + | `invalid_body_reader_state` | An error occurred when draining the request body, aborting the HTTP/1.1 connection. This could be caused by app code reading the request body and missing a call to `PipeReader.AdvanceTo` in a finally block. | | `invalid_data_padding` | An HTTP/2 `HEADER` or `DATA` frame has an invalid amount of padding. | | `invalid_frame_length` | An HTTP/2 frame was received with an invalid frame payload length. The frame could contain a payload that is not valid for the type, or a `DATA` frame payload does not match the length specified in the frame header. | | `invalid_handshake` | An invalid HTTP/2 handshake was received. | @@ -73,7 +73,7 @@ groups: | `invalid_settings` | The connection received an HTTP/2 or HTTP/3 `SETTINGS` frame with invalid settings. | | `invalid_stream_id` | An HTTP/2 stream with an invalid stream ID was received. | | `invalid_window_update_size` | The server received an HTTP/2 `WINDOW_UPDATE` frame with a zero increment, or an increment that caused a flow-control window to exceed the maximum size. | - | `io_error` | An `IOException` occurred while reading or writing connection data. | + | `io_error` | An `IOException` occurred while reading or writing HTTP/2 or HTTP/3 connection data. | | `keep_alive_timeout` | There was no activity on the connection, and the keep-alive timeout configured by `KestrelServerLimits.KeepAliveTimeout` was exceeded. | | `max_concurrent_connections_exceeded` | The connection exceeded the maximum concurrent connection limit. Configured by `KestrelServerLimits.MaxConcurrentConnections`. | | `max_frame_length_exceeded` | The connection received an HTTP/2 frame that exceeded the size limit specified by `Http2Limits.MaxFrameSize`. | @@ -92,7 +92,7 @@ groups: | `stream_self_dependency` | The connection received an HTTP/2 frame that caused a frame to depend on itself. | | `tls_handshake_failed` | An error occurred during the TLS handshake for a connection. Only reported for HTTP/1.1 and HTTP/2 connections. The TLS handshake for HTTP/3 is internal to QUIC transport. | ![Experimental](https://img.shields.io/badge/-experimental-blue) | | `tls_not_supported` | A TLS handshake was received by an endpoint that isn't configured to support TLS. | - | `unexpected_end_of_request_content` | The HTTP request body ended before the data specified by `content-length` was received. | + | `unexpected_end_of_request_content` | The HTTP/1.1 request body ended before the data specified by the `content-length` header or chunked transfer encoding mechanism was received. | | `unexpected_frame` | An unexpected HTTP/2 or HTTP/3 frame type was received. The frame type is either unknown, unsupported, or invalid for the current stream state. | | `unknown_stream` | An HTTP/2 frame was received on an unknown stream. | | `write_canceled` | The cancellation of a response body write aborted the HTTP/1.1 connection. |