When a website works normally, most people never think about what happens between their browser and the web server.
You type a website address, press Enter, and the page appears.
But when something goes wrong, the browser may display messages such as:
404 Not Found
403 Forbidden
500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
These messages are not random.
They are based on HTTP status codes, which are part of the communication between a client and a web server.
Understanding HTTP status codes is one of the most useful skills for anyone working with websites, web development, APIs, hosting, Linux servers, or website troubleshooting.
A status code can provide an important clue about where a problem occurred.
For example, a 404 usually means that the requested resource could not be found, while a 500 indicates that the server encountered an internal error while handling the request.
A 502 can mean that a gateway or reverse proxy received an invalid response from an upstream server.
These differences matter.
If a website shows a 404 error, reinstalling the server is unlikely to solve the problem.
If it shows a 502 error, checking whether the backend application is running may be much more useful.
This guide explains HTTP status codes from the basics and shows how they can be used to troubleshoot real websites and web applications.
What Is HTTP?
HTTP stands for Hypertext Transfer Protocol.
It is one of the main protocols used for communication between web clients and servers.
A browser is an HTTP client.
A web server receives HTTP requests and sends HTTP responses.
For example, when you visit:
https://example.com/
the browser can send an HTTP request asking for a resource.
The server then returns a response.
A simplified exchange looks like this:
Browser
|
| HTTP Request
↓
Web Server
|
| HTTP Response
↓
Browser
The response contains information such as a status code and, depending on the request, headers and content.
What Is an HTTP Status Code?
An HTTP status code is a three-digit number returned by a server or an intermediary in an HTTP response.
Examples include:
200
301
302
400
401
403
404
500
502
503
504
The first digit gives a general indication of the response category.
There are five major groups:
| Range | Category |
|---|---|
| 100–199 | Informational |
| 200–299 | Successful |
| 300–399 | Redirection |
| 400–499 | Client errors |
| 500–599 | Server errors |
This gives you an immediate way to understand the general situation.
For example:
2xx → Success
3xx → Redirection
4xx → Request/client-side problem
5xx → Server-side problem
This does not mean every 4xx error is literally caused by the user, or every 5xx problem is necessarily caused by the application itself.
It simply describes how HTTP classifies the response.
Why Status Codes Matter
Imagine that someone tells you:
“My website isn't working.”
That information is not very specific.
But if they say:
“The website returns HTTP 404.”
you immediately have more information.
Or:
“Nginx returns 502 Bad Gateway.”
Now the investigation can focus on a different part of the system.
Status codes therefore act as useful diagnostic clues.
They help developers and server administrators determine what happened during a request.
The Five HTTP Status Code Categories
Before examining individual codes, it helps to understand the five groups.
1xx — Informational
These responses provide information about the request process.
They are not usually the status codes beginners encounter when a normal webpage loads.
2xx — Successful
These indicate that the request was successfully received and processed.
The most famous example is:
200 OK
3xx — Redirection
These tell the client that it needs to take some additional action, often by requesting another URL.
Examples include:
301 Moved Permanently
302 Found
304 Not Modified
307 Temporary Redirect
308 Permanent Redirect
4xx — Client Errors
These indicate that the request could not be fulfilled because of something about the request or the requested resource.
Examples include:
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timeout
409 Conflict
429 Too Many Requests
5xx — Server Errors
These indicate that the server or an intermediary encountered a problem while attempting to fulfill an apparently valid request.
Examples include:
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
200 OK
The 200 OK status code means the request was successfully processed.
For a normal webpage, this is generally what you want.
For example:
GET /index.html
might result in:
HTTP/1.1 200 OK
The server then sends the requested content.
However, a 200 response does not necessarily mean that everything about a website is perfect.
An application could technically return HTTP 200 while displaying an error message inside the page.
For example, a poorly designed application might show:
200 OK
Something went wrong. Please try again.
This is why status codes should be considered together with the actual response content.
201 Created
The 201 Created status code is commonly associated with APIs.
It indicates that a request successfully created a new resource.
For example, a mobile application might send:
POST /api/users
and the server creates a new account.
The API might respond with:
201 Created
This is particularly useful for developers building REST APIs.
204 No Content
204 No Content indicates that the request was successfully processed but there is no response content to return.
It can be useful for operations where the server has completed the requested action and there is nothing else to send.
For example, an API might return 204 after successfully deleting a resource.
301 Moved Permanently
301 Moved Permanently tells clients that a resource has permanently moved to another URL.
For example:
old-page.html
↓
new-page.html
A server can tell the browser that the old URL should redirect to the new one.
301 redirects are especially important during:
Website migrations
URL restructuring
Domain changes
HTTP-to-HTTPS migrations
Changing old page URLs
For example:
http://example.com
↓
https://example.com
may involve a redirect.
Why 301 Redirects Matter for Websites
Suppose your old page is:
example.com/old-article
and you move it to:
example.com/new-article
If you simply delete the old page, visitors and search engines that still use the old URL may encounter a 404.
A properly configured redirect can send users to the new URL.
Redirects can therefore help preserve access to content when URLs change.
However, redirects should be configured carefully.
Creating long chains such as:
A → B → C → D
is generally less desirable than sending the original URL directly to the final destination.
302 Found
302 Found is another redirect status code.
It is generally used for a temporary redirection.
The distinction between permanent and temporary redirects matters because clients, browsers, caches, search engines, and applications may treat them differently.
If a URL has permanently moved, a permanent redirect is generally more appropriate.
If the redirection is temporary, a temporary redirect may be more suitable.
307 and 308 Redirects
Modern HTTP also includes:
307 Temporary Redirect
308 Permanent Redirect
These are similar in purpose to temporary and permanent redirects but have more explicit method-preservation behavior.
This becomes important for requests such as:
POST
PUT
PATCH
rather than simple browser GET requests.
For ordinary website redirects, developers often encounter 301 and 302 first, but 307 and 308 can be useful when precise HTTP method behavior matters.
304 Not Modified
304 Not Modified is related to caching.
It tells the client that the requested resource has not changed relative to the client's cached copy, so the client can use its existing cached version.
This can reduce unnecessary data transfer.
For example, a browser may already have:
style.css
in its cache.
When requesting it again, the browser can provide information that allows the server to determine whether the cached version is still valid.
If nothing has changed, the server may respond with:
304 Not Modified
The browser can then continue using its cached copy.
This is one of the mechanisms that helps websites avoid repeatedly downloading unchanged resources.
400 Bad Request
400 Bad Request means the server could not process the request because it was considered invalid.
Possible causes include:
Malformed request syntax
Invalid parameters
Invalid JSON
Incorrect request structure
Invalid headers
For example, an API might expect:
{
"name": "Atif"
}
but receive malformed JSON.
The API could respond with a 400 status.
When troubleshooting a 400 error, inspect the request itself.
401 Unauthorized
401 Unauthorized generally means authentication is required or the provided authentication credentials were not accepted.
For example:
GET /api/account
might require a valid authentication token.
If the token is missing or invalid, the server could return:
401 Unauthorized
This is common in APIs.
It is important to distinguish 401 from 403.
403 Forbidden
A 403 Forbidden response means the server understood the request but is refusing to fulfill it.
Possible reasons include:
Insufficient permissions
Access-control rules
Directory restrictions
Firewall or security rules
Application authorization rules
For example, a user may be logged in but not have permission to access an administrator page.
That is conceptually different from not being authenticated at all.
A simple way to remember the distinction is:
401 → Authentication problem
403 → Access is forbidden
The exact semantics depend on the application and HTTP implementation, but this distinction is useful for troubleshooting.
404 Not Found
The famous:
404 Not Found
means the server could not find the requested resource.
For example:
https://example.com/products/old-phone
may no longer exist.
Possible causes include:
Typo in URL
Deleted page
Renamed page
Incorrect application route
Missing file
Incorrect deployment
Broken link
A 404 is not necessarily a server failure.
The server may be working perfectly.
It is simply saying:
“I received your request, but I do not have that resource at this location.”
Why 404 Errors Are Common
Websites change.
Pages get renamed.
Products are removed.
Developers reorganize URL structures.
Old links remain in search results or external websites.
For example:
/old-page
may become:
/articles/old-page
If the old URL is not redirected, visitors may receive a 404.
This is why website maintenance often includes finding broken links and deciding whether old URLs should redirect to appropriate new pages.
405 Method Not Allowed
A 405 Method Not Allowed response means the server understands the HTTP method but does not allow that method for the requested resource.
For example, an endpoint might support:
GET
but not:
POST
If the client sends the wrong method, the server may return:
405 Method Not Allowed
This is particularly common during API development.
408 Request Timeout
408 Request Timeout indicates that the server did not receive a complete request within the time it was prepared to wait.
This can happen due to slow connections or other network conditions.
However, not every timeout seen in a browser will appear specifically as a 408.
There are many layers where timeouts can occur.
This becomes particularly important when diagnosing reverse proxies and gateways.
409 Conflict
A 409 Conflict indicates that a request conflicts with the current state of the target resource.
It can be useful for APIs.
For example, imagine an application where a username must be unique.
A user tries to create:
username = admin
but another account already uses it.
The API could return:
409 Conflict
The exact use depends on the application's design.
429 Too Many Requests
429 Too Many Requests means the client has sent too many requests within a given period or has exceeded a configured rate limit.
This is common with:
APIs
Login systems
Public services
Security controls
Scraping protection
Rate-limited platforms
For example, an API may allow a client to make only a certain number of requests during a defined period.
Once the limit is reached, the service may return:
429 Too Many Requests
This is not necessarily an indication that the server has crashed.
It may be working exactly as designed.
Why Rate Limiting Exists
Without rate limiting, a public endpoint could receive an excessive number of requests from a single client or group of clients.
Rate limiting can help protect:
Server resources
Database resources
APIs
Authentication systems
Network capacity
It can also reduce the impact of some automated abuse.
The exact limits depend on the application.
500 Internal Server Error
Now we reach one of the most important server-side errors:
500 Internal Server Error
A 500 response generally means that the server encountered an unexpected condition while processing the request.
The exact cause could be almost anything inside the application or server configuration.
Examples include:
Unhandled application exception
Programming error
Database failure
Missing dependency
Incorrect configuration
File permission problem
Environment variable missing
Application startup problem
The status code itself does not tell you the exact cause.
You need logs.
Never Troubleshoot a 500 Error by Guessing
Suppose your Python application returns:
500 Internal Server Error
Changing DNS probably will not fix it.
Changing the browser probably will not fix it.
Reinstalling the operating system should not be your first step.
Instead, inspect the application logs.
Depending on the deployment, you may need to examine:
Gunicorn logs
Application logs
Nginx logs
System logs
Database logs
The exact location depends on the server configuration.
Example: Python Application and 500 Error
Imagine this architecture:
Browser
|
v
Nginx
|
v
Gunicorn
|
v
Flask
|
v
Database
The browser receives:
500 Internal Server Error
There are several possible failure points.
The Flask application may have thrown an exception.
The database query may have failed.
A required environment variable may be missing.
A Python dependency may not be installed.
The application may have a programming error.
The first task is therefore to determine which component generated the failure.
502 Bad Gateway
A 502 Bad Gateway error is particularly important when using reverse proxies.
For example:
Browser
|
v
Nginx
|
v
Gunicorn
|
v
Python application
If Nginx cannot obtain a valid response from the upstream application, it may return:
502 Bad Gateway
Possible causes include:
Gunicorn is not running
Wrong Gunicorn socket or port
Application crashed
Incorrect Nginx configuration
Firewall blocking the connection
Application listening on the wrong interface
Upstream service refusing connections
How to Troubleshoot a 502
If you have:
Nginx → Gunicorn
and receive 502, do not immediately blame Nginx.
Check the chain.
First:
Is Gunicorn running?
Then:
Is it listening on the expected port/socket?
Then:
Can the server communicate with it?
Then:
Can Gunicorn successfully start the Python application?
Then:
Does the application itself work?
This layered approach can quickly narrow down the problem.
503 Service Unavailable
A 503 Service Unavailable response generally means that the server is currently unable to handle the request.
Possible causes include:
Application temporarily unavailable
Server overloaded
Maintenance mode
Insufficient resources
Backend service unavailable
Intentional service protection
For example, an application may deliberately return 503 while undergoing maintenance.
A 503 therefore does not always mean something has permanently failed.
504 Gateway Timeout
A 504 Gateway Timeout occurs when a gateway or proxy does not receive a timely response from an upstream service.
For example:
Browser
|
v
Nginx
|
v
Application
|
v
Database
Suppose the application is waiting too long for a database query.
The proxy may eventually time out and return:
504 Gateway Timeout
This is different from a simple 404.
The request reached the infrastructure, but something took too long to produce the required response.
502 vs 503 vs 504
These three errors are frequently confused.
A simplified interpretation is:
| Status | Typical Meaning |
|---|---|
| 502 | Gateway received an invalid/bad response from upstream |
| 503 | Service is currently unavailable |
| 504 | Gateway timed out waiting for upstream |
The exact behavior depends on the server, proxy, and architecture.
But this distinction provides a useful starting point.
A Website Can Have Multiple HTTP Layers
Modern websites are rarely just:
Browser → One Server
They may look more like:
Browser
|
DNS
|
CDN
|
Load Balancer
|
Reverse Proxy
|
Application Server
|
Application
|
Database
An HTTP error can therefore originate at different layers.
For example:
CDN → Origin unavailable
may produce different behavior from:
Application → Database failure
This is why the same status code can have different underlying causes.
HTTP Status Codes in APIs
Status codes are particularly important for APIs.
Suppose a mobile application sends:
POST /api/login
The API might return:
200 OK
for successful authentication.
If the request is malformed:
400 Bad Request
If credentials are invalid:
401 Unauthorized
If the user lacks permission:
403 Forbidden
If the resource does not exist:
404 Not Found
If the server encounters an unexpected error:
500 Internal Server Error
This allows the mobile application to react appropriately.
Do Not Use 200 for Every API Result
A poorly designed API might return:
HTTP 200
{
"success": false,
"error": "Something went wrong"
}
for every situation.
While this can technically be implemented, it makes HTTP-level handling less meaningful.
Using appropriate status codes can make APIs easier to understand and debug.
For example:
201 → resource created
400 → invalid request
401 → authentication required/failed
403 → forbidden
404 → resource not found
409 → conflict
422 → validation-related problem in APIs that use it
429 → rate limit
500 → unexpected server error
The exact API design depends on the application.
HTTP Status Codes and SEO
HTTP status codes can also matter for websites that appear in search engines.
Search engines need to understand whether a page:
Exists
Has moved
Is temporarily unavailable
Does not exist
For example, a page that has permanently moved may use a suitable permanent redirect.
A genuinely missing page may return 404 or another appropriate not-found response.
This is one reason website owners should avoid redirecting every missing URL to the homepage simply to eliminate visible 404 pages.
A nonexistent page and the homepage are not necessarily the same resource.
A Custom 404 Page Is Useful
A website can create a custom 404 page that helps visitors recover.
Instead of displaying a plain:
404 Not Found
the website can provide:
Search box
Homepage link
Popular articles
Categories
Navigation menu
Suggested pages
This makes a broken link less frustrating for users.
The HTTP status should still accurately represent the missing resource.
A custom design does not mean the server should falsely return 200 for every nonexistent page.
HTTP Status Codes and Web Server Logs
Server logs are one of the most useful sources of information during troubleshooting.
A web server log may contain information such as:
IP address
Timestamp
HTTP method
Requested URL
Status code
Response size
User agent
For example:
GET /index.html 200
GET /missing.html 404
GET /admin 403
These records can reveal patterns.
If thousands of requests produce 404 errors, you may have broken links, incorrect routes, or automated traffic.
If many requests suddenly produce 500 errors, an application deployment may have introduced a problem.
HTTP Status Codes and Nginx
Nginx is commonly used as a web server and reverse proxy.
It may generate or pass through different status codes depending on the configuration.
For example:
Browser
|
v
Nginx
|
v
Gunicorn
Nginx might return a 502 when the upstream application cannot be reached.
It can also serve static files directly and return 404 when a requested file does not exist.
This means the Nginx logs can be extremely useful when diagnosing website problems.
HTTP Status Codes and Apache
Apache can also return and process HTTP status codes.
A PHP application running behind Apache may generate:
200
404
500
depending on what happens during the request.
Apache configuration can also influence access permissions, redirects, rewrite rules, and other behavior.
Therefore, when troubleshooting an Apache-hosted website, investigate both:
Apache configuration
and:
Application behavior
HTTP Status Codes and Cloud Services
Cloud platforms add additional layers.
For example:
Browser
|
CDN
|
Load Balancer
|
Container
|
Application
|
Database
A failure in any layer may affect the final response.
This is why modern troubleshooting often requires tracing the request through the architecture rather than looking at one server.
Browser Developer Tools
A browser's Developer Tools are extremely useful for examining HTTP responses.
In most modern browsers, you can open Developer Tools and select the Network panel.
Then reload the page.
You may see requests such as:
index.html 200
style.css 200
app.js 200
logo.png 200
missing.jpg 404
api/data 500
This immediately tells you that the HTML page itself may be working while another resource is failing.
For frontend developers, this is one of the most valuable debugging tools available.
A Page Can Load While Its API Fails
Suppose a dashboard page opens successfully:
GET /dashboard → 200
but the page's JavaScript requests:
GET /api/statistics
and receives:
500
The user might see a blank chart or error message.
At first glance, it may appear that the entire website is broken.
The Network panel can reveal that the main page is working and only the API request is failing.
This is why looking at individual HTTP requests is often more useful than simply refreshing the browser.
A Page Can Also Fail Because of One Missing Resource
Imagine:
HTML → 200
CSS → 200
JavaScript → 200
Image → 404
The website may still load, but the missing image will not appear.
Or:
JavaScript → 404
could cause important interactive features to stop working.
The main page's status code therefore does not always tell the whole story.
Modern websites may make dozens or hundreds of HTTP requests while loading.
HTTP Methods Matter Too
HTTP status codes are closely related to HTTP methods.
Common methods include:
GET
POST
PUT
PATCH
DELETE
HEAD
OPTIONS
For example:
GET
Usually used to retrieve information.
POST
Often used to submit data or create resources.
PUT
Often used to replace a resource.
PATCH
Often used to partially modify a resource.
DELETE
Used to request deletion of a resource.
The exact semantics depend on the API design.
Understanding methods helps explain errors such as:
405 Method Not Allowed
A Practical Website Troubleshooting Flow
When a website is broken, use a structured process.
Step 1: Check DNS
Does the domain resolve to the expected destination?
Use:
nslookup example.com
Step 2: Check HTTP Response
Use the browser Developer Tools or a command-line tool to determine the status code.
You need to know whether you are receiving:
200
301
404
403
500
502
503
504
or another response.
Step 3: Identify Which Component Returned It
Ask:
CDN?
Nginx?
Apache?
Application?
API?
The answer can dramatically narrow the investigation.
Step 4: Check Logs
Look at:
Web server logs
Application logs
Database logs
System logs
Step 5: Reproduce the Problem
Try the same URL again.
If possible, test:
Browser
Another browser
Another network
Command line
API client
This helps determine whether the problem is local or server-side.
Step 6: Check Recent Changes
Many production problems occur shortly after:
Deployment
DNS changes
Plugin installation
Framework update
Server update
Database migration
Configuration changes
Ask:
“What changed immediately before the problem started?”
This can be one of the fastest ways to find the cause.
A Useful Status Code Cheat Sheet
| Code | Meaning | Common Situation |
|---|---|---|
| 200 | OK | Request succeeded |
| 201 | Created | New resource created |
| 204 | No Content | Request succeeded without response body |
| 301 | Moved Permanently | Permanent redirect |
| 302 | Found | Temporary-style redirect |
| 304 | Not Modified | Cached resource can be reused |
| 307 | Temporary Redirect | Temporary redirect preserving method |
| 308 | Permanent Redirect | Permanent redirect preserving method |
| 400 | Bad Request | Invalid request |
| 401 | Unauthorized | Authentication required/failed |
| 403 | Forbidden | Access refused |
| 404 | Not Found | Resource does not exist at requested URL |
| 405 | Method Not Allowed | HTTP method is not supported for resource |
| 408 | Request Timeout | Request took too long |
| 409 | Conflict | Request conflicts with resource state |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Unexpected server-side error |
| 501 | Not Implemented | Server does not support required functionality |
| 502 | Bad Gateway | Gateway/proxy received bad upstream response |
| 503 | Service Unavailable | Service temporarily unavailable |
| 504 | Gateway Timeout | Upstream service took too long |
Do Not Memorize Every Status Code
You do not need to memorize every HTTP status code to become good at troubleshooting.
Start with these:
200
301
302
304
400
401
403
404
405
429
500
502
503
504
These cover many situations encountered in everyday website and API development.
More importantly, learn how to investigate the problem behind the code.
A 500 error is not fixed by knowing that 500 means "server error."
You need to find which server component produced the error and why.
The Most Important Difference: 4xx vs 5xx
One useful rule is:
4xx → The request cannot be fulfilled as requested
5xx → The server/infrastructure encountered a problem fulfilling it
But don't interpret this too rigidly.
For example, a 403 may be caused by a server configuration rule rather than anything the user did wrong.
Likewise, a 429 may be an intentional protection mechanism.
The status code is a classification, not a complete diagnosis.
Don't Blame the Browser First
When a website fails, it is tempting to assume:
“My browser is broken.”
Sometimes browser cache, extensions, local DNS, or network settings really are involved.
But the HTTP response itself provides useful evidence.
If multiple devices and networks receive:
500 Internal Server Error
the problem is unlikely to be specific to one browser.
If only one computer has the problem while everyone else can access the website, local troubleshooting becomes more relevant.
Always compare.
Don't Restart Everything Immediately
Another common server-management mistake is restarting every service whenever something goes wrong.
For example:
Nginx restart
Database restart
Server reboot
Application restart
without first understanding the problem.
A restart may temporarily hide a problem without explaining it.
Logs can tell you much more.
For example, if a Python application repeatedly crashes because an environment variable is missing, restarting it will not solve the configuration problem.
Good troubleshooting tries to identify the cause rather than repeatedly resetting the symptoms.
Build Applications That Return Useful Errors
Developers should also think about error handling during application design.
A good API should return meaningful status codes and useful structured responses.
For example:
{
"error": "invalid_email",
"message": "The supplied email address is not valid."
}
The HTTP status might be appropriate for the type of error.
This makes debugging easier for:
Web browsers
Mobile applications
Developers
Monitoring systems
API consumers
Monitor Important HTTP Errors
If you operate a website, it can be useful to monitor status-code patterns.
For example, a sudden increase in:
500
502
503
504
could indicate an infrastructure or application problem.
A sudden increase in:
404
could indicate:
Broken links
Incorrect deployment
URL changes
Missing assets
Automated scanning
Monitoring does not necessarily need to be complicated for a small website.
Even basic log analysis can reveal useful information.
HTTP Status Codes Are a Starting Point, Not the Final Answer
This is perhaps the most important lesson.
If you see:
404
you know the requested resource was not found.
But you still need to determine why.
If you see:
500
you know there was an internal server error.
But you still need to inspect logs.
If you see:
502
you should investigate the relationship between the gateway and its upstream service.
If you see:
504
you should investigate why the upstream service did not respond in time.
The code tells you where to begin.
It does not always tell you where to finish.
Final Thoughts
HTTP status codes are a small part of web development, but they provide an enormous amount of practical information.
Once you understand them, messages such as:
404 Not Found
500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
stop looking like mysterious technical errors.
They become clues.
A 404 points you toward the requested URL or resource.
A 403 makes you investigate access permissions.
A 401 points toward authentication.
A 429 suggests rate limiting.
A 500 tells you to investigate the application or server.
A 502 makes you examine communication between a proxy and an upstream service.
A 503 suggests that a service is currently unavailable.
A 504 points toward a timeout somewhere between a gateway and an upstream service.
The same principle applies to successful responses.
A 200 means the request succeeded.
A 301 tells you that a resource has permanently moved.
A 304 can allow a browser to reuse cached content.
A 201 indicates that a resource was created.
These codes form a common language between browsers, servers, APIs, proxies, applications, and other components of the modern web.
The next time a website stops working, don't immediately start changing random settings.
First determine:
What HTTP status code am I receiving?
Then ask:
Which component generated it?
And finally:
What do the logs and request details tell me?
That simple process can turn website troubleshooting from guesswork into a structured investigation.
Whether you are running a small PHP website on shared hosting, a Python application behind Nginx and Gunicorn, a Node.js API, a WordPress blog, or a large cloud application, HTTP status codes remain one of the most useful tools for understanding what is happening between the browser and the server.

Comments
Post a Comment