HTTP 504 Gateway Timeout
Overview
The HTTP 504 Gateway Timeout status code indicates that the server, while acting as a gateway or proxy, did not receive a timely response from an upstream server or some other auxiliary server it needed to access in order to complete the request.
Purpose
The HTTP 504 response is used to inform the client that the server was acting as a gateway or proxy and did not receive a timely response from the upstream server.
Usage
Client Behavior:
- Send Request: The client sends an HTTP request to the server acting as a gateway or proxy.
- Receive Response: The client receives an HTTP 504 status code, indicating a gateway timeout.
Server Behavior:
- Gateway Timeout: The server acting as a gateway or proxy did not receive a timely response from the upstream server.
- Send Response: The server sends a 504 Gateway Timeoutresponse to the client.
Scenarios
- Upstream Server Delay: When the upstream server, accessed by the gateway, takes too long to respond.
- Gateway or Proxy Timeout: The server acting as a gateway or proxy imposes a timeout waiting for a response from the upstream server.
Sequence Diagram
Illustrating the process for an HTTP 504 response:
sequenceDiagram
    participant Client
    participant Gateway as Gateway Server
    participant Upstream as Upstream Server
    Note over Client: Step 1: Client sends a request
    Client->>Gateway: GET /resource HTTP/1.1 (Step 1)
    Note over Gateway: Step 2: Gateway forwards request to upstream server
    Gateway->>Upstream: Forwarded Request (Step 2)
    Note over Upstream: Step 3: Upstream server does not respond in time
    Upstream-->>Gateway: No response (Step 3)
    Note over Gateway: Step 4: Gateway sends 504 Gateway Timeout to client
    Gateway-->>Client: HTTP/1.1 504 Gateway Timeout (Step 4)Curl Request and Response Example
Sending a request using Curl to a gateway server that experiences a timeout:
curl -i http://example.com/resource
# Expected response: HTTP/1.1 504 Gateway TimeoutPHP cURL Request and Response Example
PHP script using cURL to handle a 504 Gateway Timeout response:
<?php
$ch = curl_init('http://example.com/resource');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 504) {
    echo "Gateway Timeout";
}
curl_close($ch);
?>
Python Request and Response Example
Python script sending a request to a gateway server that experiences a timeout and handling a 504 Gateway Timeout response:
import requests
response = requests.get('http://example.com/resource')
if response.status_code == 504:
    print("Gateway Timeout")Apache Configuration for HTTP 504 Gateway Timeout
Configuring Apache to handle 504 errors:
# Apache Configuration Example
ErrorDocument 504 "Gateway Timeout"NGINX Configuration for HTTP 504 Gateway Timeout
NGINX configuration for handling 504 errors:
# NGINX Configuration Example
error_page 504 /504.html;
location = /504.html {
    internal;
    return 504 "Gateway Timeout";
}HTTP 503 Service Unavailable HTTP 505 HTTP Version Not Supported