Appendix F. HTTP Status Codes

The HyperText Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. It is a generic, stateless protocol that can be used for many tasks (e.g., name servers and distributed object management systems) beyond its use for hypertext through extension of its request methods, error codes, and headers. An important feature of HTTP is the typing and negotiation of data representation, which allows systems to be built independently of the data being transferred.

HTTP/1.0 is described in RFC 1945. HTTP/1.1 is the latest version of the specification, and as of this writing HTTP/1.1 is covered in RFC 2616.

Only a small subset of HTTP response codes usually is used when writing mod_perl applications, but sometimes you need to know others as well. We will list the codes here. Their names are fairly self-explanatory, but you can find extended explanations in the appropriate RFC (see section 9 in RFC 1945 and section 10 in RFC 2616). You can always find the latest links to these RFCs at the World Wide Web Consortium’s site, http://www.w3.org/Protocols/.

While HTTP/1.1 is widely supported, HTTP/1.0 still remains the mainstream standard. Therefore, we will supply a summary for each version, including the corresponding Apache constants.

In mod_perl, these constants can be accessed via the Apache::Constants package (e.g., to access the HTTP_OK constant, use Apache::Constants::HTTP_OK). See the Apache::Constants manpage for more information.

HTTP/1.0 Status Codes

Successful 2xx:

200 HTTP_OK                    
201 HTTP_CREATED               
202 HTTP_ACCEPTED              
204 HTTP_NO_CONTENT           

Redirection 3xx:

300 HTTP_MOVED_PERMANENTLY     
301 HTTP_MOVED_TEMPORARILY     
302 HTTP_SEE_OTHER             
304 HTTP_NOT_MODIFIED          

Client Error 4xx:

400 HTTP_BAD_REQUEST           
401 HTTP_UNAUTHORIZED          
403 HTTP_FORBIDDEN             
404 HTTP_NOT_FOUND             

Server Error 5xx:

500 HTTP_INTERNAL_SERVER_ERROR 
501 HTTP_NOT_IMPLEMENTED       
502 HTTP_BAD_GATEWAY           
503 HTTP_SERVICE_UNAVAILABLE

HTTP/1.1 Status Codes

Informational 1xx:

100 HTTP_CONTINUE
101 HTTP_SWITCHING_PROTOCOLS

Successful 2xx:

200 HTTP_OK
201 HTTP_CREATED
202 HTTP_ACCEPTED
203 HTTP_NON_AUTHORITATIVE
204 HTTP_NO_CONTENT
205 HTTP_RESET_CONTENT
206 HTTP_PARTIAL_CONTENT

Redirection 3xx:

300 HTTP_MULTIPLE_CHOICES
301 HTTP_MOVED_PERMANENTLY
302 HTTP_MOVED_TEMPORARILY
303 HTTP_SEE_OTHER
304 HTTP_NOT_MODIFIED
305 HTTP_USE_PROXY
306
307 HTTP_TEMPORARY_REDIRECT

Client Error 4xx:

400 HTTP_BAD_REQUEST
401 HTTP_UNAUTHORIZED
402 HTTP_PAYMENT_REQUIRED
403 HTTP_FORBIDDEN
404 HTTP_NOT_FOUND
405 HTTP_METHOD_NOT_ALLOWED
406 HTTP_NOT_ACCEPTABLE
407 HTTP_PROXY_AUTHENTICATION_REQUIRED
408 HTTP_REQUEST_TIMEOUT
409 HTTP_CONFLICT
410 HTTP_GONE
411 HTTP_LENGTH REQUIRED
412 HTTP_PRECONDITION_FAILED
413 HTTP_REQUEST_ENTITY_TOO_LARGE
414 HTTP_REQUEST_URI_TOO_LARGE
415 HTTP_UNSUPPORTED_MEDIA_TYPE
416 HTTP_RANGE_NOT_SATISFIABLE
417 HTTP_EXPECTATION_FAILED

Server Error 5xx:

500 HTTP_INTERNAL_SERVER_ERROR
501 HTTP_NOT IMPLEMENTED
502 HTTP_BAD_GATEWAY
503 HTTP_SERVICE_UNAVAILABLE
504 HTTP_GATEWAY_TIME_OUT
505 HTTP_VERSION_NOT_SUPPORTED

References

All the information related to web protocols can be found at the World Wide Web Consortium’s site, http://www.w3.org/Protocols/.

There are many mirrors of the RFCs all around the world. One of the good starting points is http://www.rfc-editor.org/.

Get Practical mod_perl now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.