Guide

HTTP Status Codes for Bug Reports

Use HTTP status codes as bug-report evidence: understand 2xx to 5xx, compare 401 and 409 examples, and record observations without guessing the cause.

Use the code as evidence, not a diagnosis

An HTTP status code describes a response to one request. In a bug report, record the action, request method and safe path, code, time, and what the person saw on the page. Then compare that response with the expected outcome. A 200 response can accompany a failed business outcome, and a 500 response does not identify the failing component by itself.

The classes are a quick first pass: 1xx is informational, 2xx indicates HTTP success, 3xx is redirection, 4xx is a client-error response, and 5xx is a server-error response. “Client error” describes the request/response class, not who is at fault. A redirect is not automatically a bug; 304, for example, supports cache reuse. These meanings follow MDN’s status reference and the HTTP Semantics specification.

Codes worth recording in a browser bug report

These are short meanings, not a diagnosis. The right column tells a reviewer what else to collect for the affected action.

HTTP status codes, brief meanings, and useful bug-report observations
CodeResponse meaningRecord with the code
400Request could not be processed as sentMethod, safe input shape, and response message.
401Authentication is requiredSigned-in state, action, and whether a fresh sign-in changes the result.
403Access is refusedTest account role and the resource requested.
404Resource is not available here; existence may be concealedExpected route or item, tested permissions, and exact response.
409Request conflicts with current stateStarting version, edit order, and any conflict message.
422Content is understood but cannot be processed semanticallyField or response detail, with private values removed.
429Too many requests in a time windowAttempt count and Retry-After if the response includes it.
500Generic server error responseAction, method, path, time, and visible result.
502Gateway received an invalid responseWhich request and gateway response were visible.
503Service is unavailableTime, retry behavior, and Retry-After if present.
504Gateway did not receive a response in timeRequest timing and what the page displayed.

A status 0 shown by some network recordings means no HTTP response code was recorded; it is not a code sent by an HTTP server. Check the request’s surrounding evidence before deciding whether it was cancelled, blocked, or interrupted. The HAR reading guide works through a synthetic status-0 row.

Two fictional outcomes that need different follow-up

401 after an idle save attempt

A test editor leaves a draft open, changes its title, and presses Save. The request returns 401; the page shows a sign-in prompt and the draft stays unchanged. After signing in again, a later save succeeds.

Report both attempts, the tested role, and the visible prompt. The sequence makes a session-related hypothesis reasonable to investigate, but the status alone does not prove exactly why authentication failed.

409 after two editors change one draft

Two fictional test editors open the same draft. Editor B saves first; Editor A then submits an older version. The request returns 409, and the page says only “Save failed.”

Record the edit order, response, and lack of recovery guidance. A conflict response may be expected protection against overwriting work; the review question is whether the user can understand and resolve it.

Contrast both with a fictional checkout POST /api/orders returning 500 while the button remains loading. That is a generic error response plus a visible failure. Record the attempt and inspect logs before naming a root cause.

When a retry changes the evidence

Suppose a fictional form submission returns 429 and includes Retry-After. Record that header, the attempt count, and whether the page told the tester when to try again; MDN’s 429 reference describes the optional header. Do not repeatedly submit just to measure a limit. If the later attempt returns 200 but the form still appears unsent, report both responses and the visible state as separate observations.

For a 401 after a fresh sign-in, keep the role, request path, and new attempt time. The code identifies an authentication response, while the before-and-after comparison helps the team investigate what changed.

Copy a report structure, then replace the example facts

This static snippet uses the fictional 401 case. Select and copy it into your own notes, then replace each value with observations from the actual attempt. Keep private URLs, tokens, and personal data out of shared evidence.

Title: Save asks me to sign in after an idle test session
Starting state: Signed in as a test editor, draft open, then idle before saving.
Action: Change the draft title and press Save once.
Expected: The change saves or the page clearly asks me to sign in again.
Actual: A sign-in prompt appears; the draft remains unchanged.
Network observation: POST /api/drafts/42 returned HTTP 401 at 14:32 in this fictional attempt.
Follow-up: A fresh sign-in allowed a later save. Exact session expiry cause is unconfirmed.

To collect network evidence, follow the HAR capture guide and inspect the file with the HAR analyzer. A console excerpt may add context, but it does not replace a response code. Pair the reviewed result with repeatable steps in the bug-report generator; the sample report shows a fuller handoff.

Published October 9, 2026. Updated October 10, 2026. Method: status meanings are condensed from the linked MDN and HTTP Semantics references; the scenarios and snippet are invented teaching examples.

Examples for your team

Builder example

A builder records a 401 response during a fictional save attempt alongside the visible sign-in prompt and tested session state.

Start your 14-day free trial

Agency / QA example

A QA tester compares a fictional 409 edit conflict with a 500 checkout response, keeping observed codes separate from suspected causes.

Start your 14-day free trial

Capture the next report with ContextCapture

Start a 14-day free trial. The beta plan is $7.99 per month for unlimited projects and reports, with up to five team members.