Other 4xx codes
All HTTP status codes in ASP.NET Core
4xx Client error
The request headers, or one header, are too large (RFC 6585).
In ASP.NET Core: Kestrel sends it when headers exceed MaxRequestHeadersTotalSize (32 KB by default). Large cookies and tokens are the usual cause.
The StatusCodes constant, HttpStatusCode enum name, reason phrase, class, and how EnsureSuccessStatusCode() and the standard resilience handler treat 431.
| Constant | StatusCodes.Status431RequestHeaderFieldsTooLarge |
|---|---|
| HttpStatusCode | HttpStatusCode.RequestHeaderFieldsTooLarge |
| Reason phrase | Kestrel sends Request Header Fields Too Large |
| Class | 4xx, client error |
| IsSuccessStatusCode | false |
| EnsureSuccessStatusCode() | throws HttpRequestException: Response status code does not indicate success: 431 (Request Header Fields Too Large). |
| Standard resilience handler | does not retry it |
Results.StatusCode(StatusCodes.Status431RequestHeaderFieldsTooLarge)
Results.Problem(statusCode: StatusCodes.Status431RequestHeaderFieldsTooLarge, detail: "...")StatusCode(StatusCodes.Status431RequestHeaderFieldsTooLarge)
Problem(statusCode: StatusCodes.Status431RequestHeaderFieldsTooLarge, detail: "...")What Results.Problem(statusCode: 431) sends (with AddProblemDetails()), as application/problem+json:
{
"title": "Request Header Fields Too Large",
"status": 431,
"traceId": "0HNA1B2C3D4E5:00000001"
}A controller's Problem(statusCode: 431) sends a different body, because MVC only fills type and title for codes in ApiBehaviorOptions.ClientErrorMapping:
{
"status": 431,
"traceId": "0HNA1B2C3D4E5:00000001"
}A bare StatusCode(431) in an [ApiController] also gets a ProblemDetails body automatically; Results.StatusCode(431) in a minimal API sends an empty body unless you add UseStatusCodePages().
Setup
// any Kestrel appRequest
GET /items HTTP/1.1
X-Big: aaaa...(33,000 characters)Response (recorded)
HTTP/1.1 431 Request Header Fields Too LargeAll headers together may not exceed MaxRequestHeadersTotalSize, 32 KB by default. In practice the culprit is a huge cookie or token.
Fix: Shrink the cookie or token, or raise KestrelServerOptions.Limits.MaxRequestHeadersTotalSize.
Every response on this page was recorded from ASP.NET Core 10.0.12 on Kestrel in the Production environment; the HttpClient rows come from .NET 10.0.12 and Microsoft.Extensions.Http.Resilience 10.10.0.
All HTTP status codes in ASP.NET Core