Recently I had been wondering what the complete list of HTTP status code symbols was in Rails. Searching through Rails didn't yield any results for a symbol like :unprocessable_entity. Digging around in the Rails source code I found the file actionpack/lib/action_controller/status_codes.rb, which has the mapping of the status code to the status message. Then Rails defines the symbol to status code mapping dynamically from the status message.
The symbol used is an underscored version of the status message with no spaces. A quick Ruby script yields the following mapping:
| Status Code | Status Message | Symbol |
|---|---|---|
| 1xx Informational | ||
| 100 | Continue | :continue |
| 101 | Switching Protocols | :switching_protocols |
| 102 | Processing | :processing |
| 2xx Success | ||
| 200 | OK | :ok |
| 201 | Created | :created |
| 202 | Accepted | :accepted |
| 203 | Non-Authoritative Information | :non_authoritative_information |
| 204 | No Content | :no_content |
| 205 | Reset Content | :reset_content |
| 206 | Partial Content | :partial_content |
| 207 | Multi-Status | :multi_status |
| 226 | IM Used | :im_used |
| 3xx Redirection | ||
| 300 | Multiple Choices | :multiple_choices |
| 301 | Moved Permanently | :moved_permanently |
| 302 | Found | :found |
| 303 | See Other | :see_other |
| 304 | Not Modified | :not_modified |
| 305 | Use Proxy | :use_proxy |
| 307 | Temporary Redirect | :temporary_redirect |
| 4xx Client Error | ||
| 400 | Bad Request | :bad_request |
| 401 | Unauthorized | :unauthorized |
| 402 | Payment Required | :payment_required |
| 403 | Forbidden | :forbidden |
| 404 | Not Found | :not_found |
| 405 | Method Not Allowed | :method_not_allowed |
| 406 | Not Acceptable | :not_acceptable |
| 407 | Proxy Authentication Required | :proxy_authentication_required |
| 408 | Request Timeout | :request_timeout |
| 409 | Conflict | :conflict |
| 410 | Gone | :gone |
| 411 | Length Required | :length_required |
| 412 | Precondition Failed | :precondition_failed |
| 413 | Request Entity Too Large | :request_entity_too_large |
| 414 | Request-URI Too Long | :request_uri_too_long |
| 415 | Unsupported Media Type | :unsupported_media_type |
| 416 | Requested Range Not Satisfiable | :requested_range_not_satisfiable |
| 417 | Expectation Failed | :expectation_failed |
| 422 | Unprocessable Entity | :unprocessable_entity |
| 423 | Locked | :locked |
| 424 | Failed Dependency | :failed_dependency |
| 426 | Upgrade Required | :upgrade_required |
| 5xx Server Error | ||
| 500 | Internal Server Error | :internal_server_error |
| 501 | Not Implemented | :not_implemented |
| 502 | Bad Gateway | :bad_gateway |
| 503 | Service Unavailable | :service_unavailable |
| 504 | Gateway Timeout | :gateway_timeout |
| 505 | HTTP Version Not Supported | :http_version_not_supported |
| 507 | Insufficient Storage | :insufficient_storage |
| 510 | Not Extended | :not_extended |
The cheat gem contains a cheat sheet for the status codes. You can get the gem and view the status codes as follows:
sudo gem install cheat
cheat status_codes
Thanks for the info Josh.
Sorry, comments are closed for this article.
July 6th, 2008 at 02:30 PM
Thanks! This is very useful.
July 7th, 2008 at 02:39 PM
I created a cheat page for this last year. Just install the cheat gem then type "cheat status_codes". If you see anything missing, just update the cheat. Still, it would probably be useful to have this stuff searchable in the Rails source somewhere.
July 14th, 2008 at 06:15 AM
thx so much
July 15th, 2008 at 02:06 PM
Josh,
I didn't know that the status codes were included in the cheat gem. Thanks for the heads up.
I agree that these codes should be in the Rails source, and I will contribute a doc patch for these codes to docrails in the near future.
July 24th, 2008 at 02:20 PM
Thanks Cody! Very helpful!
And good to know there's a cheat sheet for it too...