HTTP Conversation Codes

posted 19 November 2008, updated 20 November 2008
Update: Welcome, hackers! You can now buy this table as a super-cute poster! Thanks to Nimbus for turning this around so fast :-)

So at lunch today myself, Isaac and a bunch of other co-workers who would probably prefer to remain nameless were having one of those free-flowing, ultra-nerdy conversations that you only get when you concentrate a bunch of incredibly technical people in one place and then prevent them, through social convention, from talking about work. These are pretty much a daily occurrence at Yahoo! at lunch time.

The conversation somehow turned -- I think it was Isaac's idea, so perhaps he can illuminate us as to his inspiration -- to the idea of simplifying conversation by referring to common workplace situations by their equivalent HTTP status codes. This turned out to be incredibly easy, and possibly even useful.

For the non-nerdy, a brief explanation: HTTP is the language your web browser uses to speak to web servers to request your pages. It's how the web server knows which content (such as a web page) you want to see. This happens before HTML or any other language gets involved, and it's used whether the content you're requesting is a web page, a picture, a movie or a file to download. The status codes are how the web server tells your browser (aka your client) roughly how things went -- so your browser knows whether the page you're seeing is the page you asked for, or whether it's an error page, or any number of other things.

This maps pretty well to a conversation between a programmer and a normal person. The normal person -- a manager, or a product person, or a marketroid -- wants something from the programmer, and the programmer needs to tell them what's going on, and often they can't just do that by giving them exactly what they asked for. And since programmers are notably bad at communicating with normal people but notably good at being very accurate about codes, this translation guide can help.

I'm not sure how often we will end up actually using these in real life -- although people occasionally use 404 already, and I am absolutely positive that 502 is going to come in handy -- but they at the very least serve as a very quick way of reminding you what the codes mean, if you happen to be building a web service. And if you're me, you're building a new web service every other bloody day, because that's all they want these days, another goddamn web service. Ahem.

Without further ado:

CodeStatusConversational Equivalent
1xx: Informational
100ContinueUh-huh...
101Switching ProtocolsLet's take this offline
2xx: Successful
200OKOK
201CreatedI wrote you an email about that
202AcceptedIf you say so.
203Non-Authoritative InformationThe last I heard...
204No ContentMmm.
205Reset ContentForget what Bob told you
206Partial ContentAll I know is...
3xx: Redirection
300Multiple ChoicesYou can get that from Bob, or John, or Sue
301Moved PermanentlyThat's Bob's job
302FoundBob is taking care of that for me today
303See OtherYou should ask Bob today, but I'll know tomorrow (not well understood by clients)
304Not ModifiedIt's the same as it was when you asked me 5 minutes ago
305Use ProxyYou should ask my boss
306deprecatedN/A
307Temporary RedirectAsk Bob about that
4xx: Client error
400Bad requestWhaaa?
401UnauthorizedYou're not allowed to know that.
402Payment RequiredMaybe a twenty would refresh my memory...
403ForbiddenIt's a secret.
404Not FoundI have no idea what you're talking about.
405Method not allowedgasp of shock
406Not AcceptableMaybe when you're older
407Proxy Authentication RequiredYou need to file a bug about that
408Request TimeoutYou still there?
409ConflictI'm working on it right now; ask me later
410GoneI don't know, and I don't care.
411Length RequiredIs this gonna take long?
412Precondition FailedYou asked me not to tell you if it was bad news.
413Request Entity Too LargeWoah, woah, this is too much detail.
414Request URI Too LongBy the time you finished asking the question I forgot what it was about
415Unsupported Media TypeSpeak English!
416Requested Range Not SatisfiableThat's all I know
417Expectation FailedYou're not gonna like this
5xx: Server error
500Internal Server Errordrooling from side of mouth
501Not ImplementedUh, yeah, about that...
502Bad GatewayBob is refusing to work with me on this.
503Service UnavailableI am way too busy to deal with your shit

Interesting side note: even at the protocol level, the programmer's expectation that it is nearly always the client's fault and hardly ever the programmer's fault is obvious.

These codes and their definitions are based on the HTTP 1.1 specification. We welcome suggestions for further refinement.