HTTP 504 Gateway Timeout indicates a gateway or proxy did not receive a timely response from an upstream server. The upstream didn't respond at all within the timeout period — contrast with 502 where the upstream responded but with invalid data. Common causes: upstream server is too slow (increase timeout or optimize), network partition between gateway and upstream, DNS resolution failure for the upstream host, or upstream server's connection pool is exhausted.
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/504
Example request:
curl -i "https://httpstatus.com/api/status/504"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.
On this code, Inspector focuses on semantics, headers, and correctness warnings that commonly affect clients and caches.
HTTP 504 Gateway Timeout 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 504 from other 5xx codes for accurate alerting and diagnosis.
// Handle 504 Gateway Timeout
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=504,
content={'error': 'Gateway Timeout', '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(504)
.body(new ErrorResponse("Gateway Timeout",
"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(504)
json.NewEncoder(w).Encode(map[string]string{
"error": "Gateway Timeout",
})
}
}()
next.ServeHTTP(w, r)
})
}