README describes the backend's 413 answer, but in the image nginx answers 413 first with an HTML page #147

Closed
opened 2026-10-14 16:08:47 +02:00 by clawbot · 2 comments
Collaborator

README.md lines 299 to 302 (Metrics), at v1.0.0-rc1: "413 for declaring a body length over the 1 MiB limit. A report whose body goes over the limit without declaring its length reaches the route, is answered 413 there, and is recorded with that status." In the image this does not happen: nginx has its own body limit, client_max_body_size, whose default is also 1 MiB, and it answers both cases itself, before the backend sees the request, with 413 and nginx's HTML error page, not the {"status":"error"} body the Report limits section (line 245) promises for every refusal. Nothing reaches the route and nothing is recorded in the metrics.

How to see it: run the image and post a 2 MiB body to /api/v1/reports with Content-Type: application/json, once with a Content-Length and once with Transfer-Encoding: chunked. Both answers are 413 Request Entity Too Large with Server: nginx and an HTML body, and the backend's request log has no line for them.

What is right: either the README says that the image's nginx answers 413 with an HTML page for any body over 1 MiB and the backend's own 413 applies to the standalone server only, or nginx is told to pass bodies up to the backend's limit (client_max_body_size above 1 MiB, or an error_page 413 that returns the JSON body) so the documented behaviour holds. The page never sends a body near the limit, so this is a documentation choice.

Severity: low.

Definition of done

  • README.md Report limits and Metrics describe what the image does for an over-limit body (status, who answers, what body, whether it is recorded), and the Backend section's 413 sentence is scoped to the standalone server, or nginx is configured so the documented behaviour holds, with the choice stated in the PR.
  • If nginx is changed: a check that posts an over-limit body through the served config and finds the documented status and body.
  • TODO.md updated in the same commit; commit title ends (closes #N) with this issue's number.

Model: fable-5-1

`README.md` lines 299 to 302 (Metrics), at `v1.0.0-rc1`: "413 for declaring a body length over the 1 MiB limit. A report whose body goes over the limit without declaring its length reaches the route, is answered 413 there, and is recorded with that status." In the image this does not happen: nginx has its own body limit, `client_max_body_size`, whose default is also 1 MiB, and it answers both cases itself, before the backend sees the request, with 413 and nginx's HTML error page, not the `{"status":"error"}` body the Report limits section (line 245) promises for every refusal. Nothing reaches the route and nothing is recorded in the metrics. **How to see it**: run the image and post a 2 MiB body to `/api/v1/reports` with `Content-Type: application/json`, once with a `Content-Length` and once with `Transfer-Encoding: chunked`. Both answers are `413 Request Entity Too Large` with `Server: nginx` and an HTML body, and the backend's request log has no line for them. **What is right**: either the README says that the image's nginx answers 413 with an HTML page for any body over 1 MiB and the backend's own 413 applies to the standalone server only, or nginx is told to pass bodies up to the backend's limit (`client_max_body_size` above 1 MiB, or an `error_page 413` that returns the JSON body) so the documented behaviour holds. The page never sends a body near the limit, so this is a documentation choice. **Severity**: low. ## Definition of done - [ ] `README.md` Report limits and Metrics describe what the image does for an over-limit body (status, who answers, what body, whether it is recorded), and the Backend section's 413 sentence is scoped to the standalone server, or nginx is configured so the documented behaviour holds, with the choice stated in the PR. - [ ] If nginx is changed: a check that posts an over-limit body through the served config and finds the documented status and body. - [ ] `TODO.md` updated in the same commit; commit title ends ` (closes #N)` with this issue's number. Model: fable-5-1
clawbot self-assigned this 2026-10-14 16:08:47 +02:00
Author
Collaborator

Decided: documentation only, as the page never sends a body near the limit; nginx is unchanged. README.md Report limits and Metrics say that in the image nginx answers any body over 1 MiB itself, with 413 and its own HTML page, and the backend never sees or records it; the backend's own 413 sentences are scoped to the backend run on its own. In the same docs PR as #145.

Model: opus-5-5

Decided: documentation only, as the page never sends a body near the limit; nginx is unchanged. `README.md` Report limits and Metrics say that in the image nginx answers any body over 1 MiB itself, with 413 and its own HTML page, and the backend never sees or records it; the backend's own 413 sentences are scoped to the backend run on its own. In the same docs PR as https://git.eeqj.de/sneak/netwatch/issues/145. Model: opus-5-5
Author
Collaborator

README Report limits and Metrics now say that in the image nginx answers an over-limit body with 413 itself, and scope the backend's own 413 to the backend run on its own: #168

Model: opus-5-5

README Report limits and Metrics now say that in the image nginx answers an over-limit body with 413 itself, and scope the backend's own 413 to the backend run on its own: https://git.eeqj.de/sneak/netwatch/pulls/168 Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/netwatch#147