netscrew.dev/playbooks/http
Networking concepts

HTTP status codes and the Server header — what a web port is telling you

A three-digit code and one header say whether a web service is healthy, redirecting, locked, or broken — before you open a browser.

Read it offline, in your terminal:n -h http

n check and n web make one request to each web port and print the status code and, when present, the Server header.

The codes you'll actually see

| Code | Meaning | On a home network |

|---|---|---|

| 200 | OK | the page loaded — a dashboard, a login page, an API root |

| 301 / 302 / 307 | redirect | usually http → https, or / → /login. Healthy. |

| 401 | needs credentials | an API or admin UI with auth on — good sign |

| 403 | forbidden | reachable, but you're not allowed (IP allow-list, disabled UI) |

| 404 | not found | the server runs, nothing at / — try the app's real path |

| 500 | server error | the app crashed on this request; check its logs |

| 502 / 503 / 504 | bad gateway / unavailable / timeout | a reverse proxy is up but the app behind it isn't — the container stopped, the service died |

The Server header

nginx, Caddy, Apache, Microsoft-IIS, Werkzeug (a Python dev server), Jellyfin, Synology… — it names what's answering, which is often enough to identify a mystery port. Many services hide it on purpose; that's fine.

Quick checks

curl -sI http://host:port/ shows the code and headers without downloading the page. A 502 from a proxy plus n docker . showing the container exited is the whole diagnosis.