Part 3: Understanding HTTP Status Codes and Their Meanings
Last updated: July 19th 2023
Introduction
This article is a new addition to the series "Introduction to Web Server Setup & Management". In this series, you'll learn how a web server operates and interacts with users, and you'll also learn how to tweak things to improve the experience. And at the end, you'll understand why we built our LAMP/LEMP stacks the way we did. You can also apply this knowledge to other programming languages and environments.
Last week, I drew the differences between HTTP and HTTPS and how incorporating HTTPS into your website can offer a plethora of advantages other than just bolstering security. And throughout this article, I aim to dissect the vast array of popular HTTP codes and explain their meanings and reasons. Let’s go ahead, shall we?
What are HTTP Status Codes?
When you make a request from your browser to a server, it responds with a three-digit code known as an HTTP status code. These codes act as a communication channel between the server and your browser, giving you insight into the type of response you're receiving. Different classes of status codes exist, each conveying specific information relevant to your request.
HTTP status codes help the user or the website owner identify and fix the errors on the site.
How are HTTP status codes identified?
Five classifications of HTTP status codes can provide helpful insights into the response, even if the exact response code is unknown to you:
- 1xx - Informative: The server has received your request and is working on it.
- 2xx - Success: The operation has been completed with success. The anticipated data has been delivered to the browser as expected.
- 3xx - Redirection: Your request can only be fulfilled with additional steps. As a result, you have been redirected to a page where you can complete the necessary actions.
- 4xx - Client error: The client is experiencing technical difficulties accessing the requested page. This may be due to a temporary outage or an error in the request formatting.
- 5xx - Server error: Although the inquiry seems proper, the server could not fulfill the request.
How to check the HTTP Status Code?
The 1XX and 2XX codes are not typically shown to end users. Instead, if there is an issue with loading a webpage, the browser may present a 3xx, 4xx, or 5xx response code.
However, using Chrome’s built-in Network monitor, you can look for the status codes of your resources. Simply right-click on a webpage, select inspect element, go to the network tab, and reload the page to see all resources and their status code.
Understanding HTTP status codes
The 1xx series
When you send a request to a server, it may respond with a 1xx Informational status code. This code indicates the server has received your request and is currently working on processing it. It's only temporary and will be a partial response to your request. While you may not encounter these codes frequently, they are still crucial to communication between your device and the server.
100 - Continue
When the client receives the status code 100 Continue, it indicates that the server has received the first part of the request and is ready for the client to proceed with the rest of the request. Alternatively, if the request has already been completed, the client should disregard the response altogether.
101 - Switching Protocols
The 101 Switching protocols status code denotes that the server has acknowledged the Upgrade header field request and specifies the particular protocol it will transition to.
102 - Processing
The status code 102 indicates that the server has acknowledged the request in its entirety. However, it is still in the process of completing it, and there is currently no response available.
103 - Early Hints
The purpose of the 103 Early hints status code is to enable the user agent to preload resources while the server is preparing a response. This code is most effective when combined with the Link Header, which makes it a precious tool for optimizing website performance. By integrating this code, users can experience faster load times and seamless browsing without any delay or interruption in their experience.
The 2xx Series
When the browser receives a 2xx Success status code, it indicates that the request has been executed successfully and the expected information has been received. This is the ideal status code to receive, as it signifies that the request has been accepted, understood, and successfully processed. It is crucial to ensure that all pages and resources return a 2xx status code. This ensures that your website visitors can access and utilize your website with ease, without any technical glitches.
200 - OK
The significance of the 200 OK status code varies depending on the request method utilized. If the request was made using the GET method, it means that the requested resource has been successfully retrieved and transmitted to the message body.
On the other hand, if the request was made using the HEAD method, only the header fields of the requested resource are sent without the message body. For POST or PUT requests, a description of the result of the action is transmitted to the message body.
Meanwhile, if the request was made using the TRACE method, the request messages received by the server are included in the message body.
From an SEO perspective, a 200 OK response code indicates a functioning page wherein all linked pages are working as expected. This status code is ideal for search engine crawlers because it means they can successfully crawl the page and add it to their search index.
201 - Created
After executing the request, if the server responds with a 201 Created status code, it indicates that the operation was successful and that a new resource or resources may have been generated.
203 - Non-Authoritative Information
When a server responds with the 203 Non-Authoritative Information status code, it indicates that the request was processed successfully. However, the meta-information retrieved differs from what is stored on the original server and was instead sourced from a third-party or local copy. This may indicate misconfiguration or mixed content unless used for backup or mirroring purposes.
204 - No Content
When the server has fulfilled a request but there's no content available, it'll respond with the 204 No Content status code. However, to ensure the user agent is up-to-date with the latest resource, it should update its cached headers.
205 - Reset Content
The status code 205 Reset Content indicates that the requested document requires a fresh start from the user's end.
The 3xx Series
When receiving a 3xx Redirection status code, it means your request has been redirected, and further action is required to complete it. Redirect occurs when the requested resource is moved to a new location, and the request will ultimately be successful.
301 - Moved Permanently
The code 301 Moved Permanently signifies that the intended source has a new and permanent URL. Therefore, any mentioning or directing towards this source should be done using one of the URLs disclosed in the response for future reference.
302 - Moved Temporarily
The code 302 Moved Temporarily, also known as "Found", signifies that the URL for the requested resource has been temporarily altered.
307 - Temporary Redirect
When a server needs to reroute a client to a different resource, it utilizes the 307 Temporary Redirect status code. It is important to note that while the client is being redirected, the request method must remain unchanged.
308 - Permanent Redirect
When you see the code 308 Permanent Redirect, it simply implies that the resource you requested has been given a new home permanently.
The 4xx Series
A 4xx Client Error status code will be displayed if a page or resource cannot be accessed. This could be because the page is unavailable or the request is invalid. It is crucial for website owners to avoid such errors as it leads to a frustrating user experience. Such errors could also negatively impact SEO efforts along with user experience.
400 - Bad Request
When the server responds with a 400 Bad Request status code, it indicates that the request sent could not be comprehended due to incorrect syntax.
401 - Unauthorised
If you receive a 401 Unauthorised status code, it signifies that the server needs you to authenticate yourself before proceeding with the request. This means you need the necessary access to perform the action you're attempting.
403 - Forbidden
The 403 Forbidden status code indicates that the client's request has been declined due to a lack of permission to access the requested content. In contrast to a 401 error, the server is aware of the client's identity but cannot grant access to the content.
404 - Not Found
This one is the most famous HTTP status code. If you come across a 404 Not Found status code, it indicates that the server couldn't locate the resource you were looking for. This might be because the resource is no longer available or the server is trying to keep it hidden from unauthorized clients.
408 - Request Timeout
When the server is prepared to await a complete request, the 408 Request Timeout status code indicates that it did not receive one within the allotted timeframe.
The 5xx Series
When you get a 5xx Server error status code, it indicates that the server failed to fulfil your request, despite it being valid. If you're encountering such errors on your website, it's vital to investigate your server's functionality immediately.
500 - Internal Server Error
The occurrence of the "500 Internal Server Error" status code implies that the server has come across an unprecedented scenario and is unable to proceed.
502 - Bad Gateway
A gateway mean that the server is basically just sending the request onwards and not handling it itself, and the destination is not giving a proper response. When a server acts as a gateway to handle a response, it must receive a valid response. However, if it gets an invalid response, the server will issue a 502 Bad Gateway response code. This signifies a hiccup in the communication between the two servers, causing the intended request to fail. It indicates that your NGINX or Apache might be misconfigured or the destination is not working or is invalid.
As an example, in a typical Web Server configuration the destination may be a back-end processing language such as PHP. So, when using php-fpm for example your webserver acts as a gateway whenever a request for a PHP file is made. The webserver then sends the request to php-fpm and expects php to process the request and return a response. So if you see this code on a server running PHP (or Node or whatever else Apache or Nginx is sending the requests to behind the scenes) then this most likely means that the php-fpm service is not running or is incorrectly configured, so that's the first thing to check.
503 - Service Unavailable
The status code 503 signifies that the server is currently not ready to process the request. This usually happens when the server is undergoing maintenance or experiencing an overload of requests.
504 - Gateway Timeout
When you encounter the 504 Gateway Timeout response code, it indicates that the gateway server was unable to receive a timely response.
508 - Loop
When the server comes across the 508 Loop Detected response code, it indicates that there is an endless loop encountered during the request processing.
Lesser known HTTP status codes
In 2xx Series:
206 Partial Content
207 Multi-Status
208 Already Reported
226 IM Used
In 3xx Series:
300 Multiple Choices
303 See Other
304 Not Modified
305 Use Proxy
306 Switch Proxy
In the 4xx Series:
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Payload Too Large
414 URI Too Long
415 Unsupported Media Type
416 Range Not Satisfiable
417 Expectation Failed
418 I'm a Teapot
421 Misdirected Request
422 Unprocessable Entity
423 Locked
424 Failed Dependency
425 Too Early
426 Upgrade Required
428 Precondition Required
429 Too Many Requests
431 Request Header Fields Too Large
451 Unavailable For Legal Reasons
In the 5xx series:
501 Not Implemented
505 HTTP Version Not Supported
506 Variant Also Negotiates
507 Insufficient Storage
510 Not Extended
511 Network Authentication Required
Conclusion
The response that a site's server sends is crucial for the functioning and performance of the website. These messages may only sometimes be visible to the user, but they provide essential information about the site's status and any potential issues.
HTTP status codes are divided into five categories, each representing a different aspect of the server's response. These categories range from informational messages to client and server errors, each providing specific details about the nature of the problem.
By understanding these codes, website owners can quickly identify and troubleshoot issues, ensuring their site remains functional and optimized for search engines. This knowledge can help preserve the site's performance and provide a positive user experience.
Aayush Nair has been designing WordPress websites for eight years now. He is also a content writer, writing blogs on technology and related topics, and likes helping people in his free time.