HTTP 502 Bad Gateway indicates that a server acting as a gateway or proxy received an invalid response from an upstream server. This is NOT a problem with the client or the gateway itself — the upstream server returned something the gateway couldn't understand. Common causes: upstream server crashed mid-response, SSL certificate mismatch between gateway and upstream, upstream returned malformed HTTP, or upstream closed the connection unexpectedly.
Response includes the status code, standard headers (including Content-Type), and a small diagnostic JSON body describing the request and returned status.
Simulator URL (copy in the app after load — not a normal link):
https://httpstatus.com/api/status/502
Example request:
curl -i "https://httpstatus.com/api/status/502"The server was acting as a gateway or proxy and received an invalid response from the upstream server.
On this code, Inspector focuses on semantics, headers, and correctness warnings that commonly affect clients and caches.
HTTP 502 Bad Gateway represents a specific server-side condition that requires different handling than other 5xx errors. Understanding the precise cause helps operations teams diagnose and resolve issues faster. Monitoring systems should distinguish 502 from other 5xx codes for accurate alerting and diagnosis.
// Handle 502 Bad Gateway
process.on('unhandledRejection', (reason) => {
console.error('Unhandled rejection:', reason);
});
app.use((err, req, res, next) => {
console.error(`${req.method} ${req.url}:`, err.stack);
res.status(err.status || 500).json({
error: process.env.NODE_ENV === 'production'
? 'Internal Server Error'
: err.message,
requestId: req.id
});
});from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import logging
logger = logging.getLogger(__name__)
@app.exception_handler(Exception)
async def server_error_handler(request: Request, exc: Exception):
logger.error(f'{request.method} {request.url}: {exc}',
exc_info=True)
return JSONResponse(
status_code=502,
content={'error': 'Bad Gateway', 'request_id': request.state.id}
)@ControllerAdvice
public class GlobalErrorHandler {
private static final Logger log = LoggerFactory.getLogger(
GlobalErrorHandler.class);
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(
Exception ex, HttpServletRequest req) {
log.error("{} {}: {}", req.getMethod(),
req.getRequestURI(), ex.getMessage(), ex);
return ResponseEntity.status(502)
.body(new ErrorResponse("Bad Gateway",
"An unexpected error occurred"));
}
}func errorMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Printf("%s %s: %v\n%s",
r.Method, r.URL, err, debug.Stack())
w.WriteHeader(502)
json.NewEncoder(w).Encode(map[string]string{
"error": "Bad Gateway",
})
}
}()
next.ServeHTTP(w, r)
})
}