⚖️ Error comparisons

Errors that look alike but need different fixes.

401vs403

401 vs 403: Unauthorized vs Forbidden

Both mean “you can’t have this”, but for different reasons. 401 says the server doesn’t know who you are; 403 says it k…

404vs410

404 vs 410: Not Found vs Gone

404 means nothing is at this URL (maybe temporarily, maybe never). 410 means something was here and was removed on purp…

301vs302

301 vs 302: Permanent vs Temporary Redirect

Both send the visitor to another URL. 301 says the move is permanent (update your links and index), 302 says it is temp…

400vs422

400 vs 422: Bad Request vs Unprocessable Content

400 means the request couldn’t be parsed or is structurally invalid. 422 means it parsed fine but the data fails valida…

406vs415

406 vs 415: Not Acceptable vs Unsupported Media Type

Both are content-type mismatches, in opposite directions. 406 is about the response format you asked for (Accept); 415…

412vs428

412 vs 428: Precondition Failed vs Precondition Required

Both protect against lost updates. 428 means you didn’t send a condition at all; 412 means you sent one (If-Match) and…

500vs502

500 vs 502: Internal Server Error vs Bad Gateway

A 500 comes from the application itself failing. A 502 comes from a proxy (Nginx, load balancer, CDN) that couldn’t get…

502vs504

502 vs 504: Bad Gateway vs Gateway Timeout

Both come from a proxy. 502 means the upstream gave a bad (or no) response; 504 means the upstream was too slow and the…

AuthNvsAuthZ

Authentication vs Authorization

Authentication verifies identity (who you are). Authorization decides permissions (what you can do). Errors in each lay…

525vs526

Cloudflare 525 vs 526: SSL Handshake Failed vs Invalid SSL Certificate

Both are TLS problems between Cloudflare and your origin. 525 means TLS couldn’t even be negotiated; 526 means it was n…

PG 23505vsMySQL 1062

Duplicate key: PostgreSQL 23505 vs MySQL 1062

The same problem — a unique/primary key collision — reported differently by the two databases, with different upsert sy…

ECONNREFUSEDvsECONNRESET

ECONNREFUSED vs ECONNRESET vs ETIMEDOUT

Three network failures at different moments: refused (nothing listening), reset (connection closed abruptly mid-use), t…

ERR_REQUIRE_ESMvsimport outside module

ERR_REQUIRE_ESM vs "Cannot use import statement outside a module"

Two sides of the same ESM/CommonJS mismatch: CommonJS code requiring an ESM package, vs ESM syntax running in a CommonJ…

1045vs2002

MySQL 1045 vs 2002: Access Denied vs Can’t Connect

2002 means the client never reached the MySQL server. 1045 means it reached the server, and the server rejected the log…

PendingvsCrashLoopBackOff

Pod Pending vs CrashLoopBackOff

Pending means the pod never got a node (or never started). CrashLoopBackOff means it started and keeps dying.

SegfaultvsOOM Killed

Segmentation fault vs Killed (OOM): exit 139 vs 137

Both end a process abruptly without a normal error. A segfault is a memory-access bug inside the program; an OOM kill i…