⚖️ Error comparisons
Errors that look alike but need different fixes.
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…
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…
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…
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…
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…
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…
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…
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…
Authentication vs Authorization
Authentication verifies identity (who you are). Authorization decides permissions (what you can do). Errors in each lay…
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…
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…
ECONNREFUSED vs ECONNRESET vs ETIMEDOUT
Three network failures at different moments: refused (nothing listening), reset (connection closed abruptly mid-use), t…
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…
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…
Pod Pending vs CrashLoopBackOff
Pending means the pod never got a node (or never started). CrashLoopBackOff means it started and keeps dying.
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…