HTTP Error Analyzer

Check what a URL is actually returning right now, or look up any status code 400–504 for common causes and the diagnostic steps that actually narrow it down.

400 — Bad Request

Likely causes:

  • Malformed request syntax (bad JSON, invalid headers)
  • Request body too large for a proxy/server limit
  • A client-side bug sending an invalid parameter

What to check:

  • Inspect the actual request body/headers in browser DevTools → Network tab
  • Check the app or API server's error log for the specific validation failure
401 — Unauthorized

Likely causes:

  • Missing or expired auth token/session
  • Wrong credentials sent
  • Clock skew breaking time-based tokens (JWT, HMAC signatures)

What to check:

  • Confirm the Authorization header is actually being sent
  • Check server time is correct — `timedatectl status`
403 — Forbidden

Likely causes:

  • Valid auth, but insufficient permissions for this resource
  • IP allowlist/firewall blocking the request
  • File permissions denying the web server read access

What to check:

  • Check web server error log for the specific denial reason
  • Verify file/directory permissions with the chmod calculator if it's a static file
404 — Not Found

Likely causes:

  • URL typo or the resource genuinely doesn't exist
  • Missing rewrite/routing rule for a single-page app
  • DNS pointing to the wrong server entirely

What to check:

  • Confirm DNS resolves where you expect it to
  • Check Nginx/Apache rewrite rules for SPA fallback routing
405 — Method Not Allowed

Likely causes:

  • Client sent POST to a GET-only endpoint (or vice versa)
  • A reverse proxy stripping or rewriting the HTTP method
  • CORS preflight (OPTIONS) not handled by the server

What to check:

  • Confirm which methods the endpoint actually accepts
  • Check for an OPTIONS handler if this is a cross-origin API call
408 — Request Timeout

Likely causes:

  • Client connection too slow to finish sending the request
  • Server-side timeout set too aggressively for large uploads
  • Network issue between client and server

What to check:

  • Check client_body_timeout (Nginx) or similar directive
  • Test from a different network to rule out client-side connectivity
409 — Conflict

Likely causes:

  • Concurrent edits to the same resource (optimistic locking failure)
  • Trying to create a resource that already exists (duplicate key)
  • State machine violation (e.g., cancelling an already-completed order)

What to check:

  • Check application logs for the specific constraint that failed
  • Look for a version/ETag mismatch in the request
429 — Too Many Requests

Likely causes:

  • Rate limit genuinely exceeded
  • A retry loop in client code hammering the endpoint
  • Rate limit configured too strictly for legitimate traffic

What to check:

  • Check the Retry-After response header for the cooldown period
  • Review rate-limit config — Nginx limit_req zone, API gateway settings
500 — Internal Server Error

Likely causes:

  • Unhandled exception in application code
  • Database connection failure
  • Misconfiguration (missing environment variable, bad config file)

What to check:

  • Check application error logs — this is almost always logged server-side
  • Check PHP-FPM error log if running PHP: /var/log/php-fpm/www-error.log
501 — Not Implemented

Likely causes:

  • Server doesn't support the requested HTTP method at all
  • A proxy forwarding an unsupported method to the backend

What to check:

  • Confirm the web server/framework actually implements this method
502 — Bad Gateway

Likely causes:

  • Upstream application server (PHP-FPM, Node, Gunicorn) crashed or isn't running
  • Reverse proxy pointing to the wrong upstream address/port
  • Upstream returned a malformed response

What to check:

  • Check if PHP-FPM/your app process is actually running: `systemctl status php-fpm`
  • Check the Nginx error log for the specific "connect() failed" message
  • Verify the upstream host:port in your Nginx config matches where the app is actually listening
503 — Service Unavailable

Likely causes:

  • Server overloaded — all worker processes busy
  • App deliberately in maintenance mode
  • Upstream health check failing in a load balancer

What to check:

  • Check worker/connection limits with the PHP-FPM or Nginx worker calculator
  • Check if a maintenance-mode flag or file is set
504 — Gateway Timeout

Likely causes:

  • Upstream application taking longer than the proxy's timeout to respond
  • A slow database query blocking the response
  • Network issue between the proxy and the upstream server

What to check:

  • Check proxy_read_timeout (Nginx) against how long the backend actually takes
  • Profile the slow endpoint — is it a specific slow query?