HTTP 307 Temporary Redirect
Overview
The HTTP 307 Temporary Redirect status code indicates that the requested resource is temporarily available at another URI, as indicated by the Location header in the response. Unlike HTTP 301 and 302, a 307 redirect requires the client to perform the redirected request using the same HTTP method as the original request.
Purpose
The HTTP 307 response is used to temporarily redirect a client request to another URI without changing the request method (e.g., a POST request remains a POST after redirection).
Usage
Client Behavior:
- Send Request: The client sends an HTTP request to a resource’s URI.
- Receive Response: The client receives the HTTP 307 status code, indicating a temporary redirect to a new URI provided in the Locationheader.
Server Behavior:
- Identify Temporary Redirect: The server determines that the requested resource should be temporarily accessed from a different URI.
- Send Response: The server sends a 307 Temporary Redirectresponse, providing the URI for the temporary location.
Scenarios
- Temporary Resource Relocation: Used when a resource is temporarily moved or under maintenance.
- Preserving Request Method: Ensuring that the HTTP method of the request remains unchanged during redirection.
Sequence Diagram
Illustrating the process for an HTTP 307 response:
sequenceDiagram
    participant Client
    participant Server as Web Server
    Note over Client: Client sends a request
    Client->>Server: POST /original-resource HTTP/1.1
    Note over Server: Server redirects temporarily
    Server->>Client: HTTP/1.1 307 Temporary Redirect
    Server->>Client: Location: /temporary-resourceCurl Request and Response Example
Sending a request using Curl that results in a 307 Temporary Redirect:
curl -i -X POST -d "data=example" http://example.com/original-resource
# Expected response: HTTP/1.1 307 Temporary Redirect
# Location: http://example.com/temporary-resourcePHP cURL Request and Response Example
PHP script using cURL to handle a 307 Temporary Redirect response:
<?php
$ch = curl_init('http://example.com/original-resource');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('data' => 'example'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 307) {
    $newUrl = curl_getinfo($ch, CURLINFO_REDIRECT_URL);
    echo "Temporarily redirected to: " . $newUrl;
}
curl_close($ch);
?>
Python Request and Response Example
Python script to send a POST request and handle a 307 Temporary Redirect response:
import requests
response = requests.post('http://example.com/original-resource', data={'data': 'example'})
if response.status_code == 307:
    print("Temporarily redirected to:", response.headers['Location'])Apache Configuration for HTTP 307 Temporary Redirect
Configuring Apache to perform a temporary redirection:
<VirtualHost *:80>
    ServerName example.com
    Redirect 307 /original-resource /temporary-resource
</VirtualHost>NGINX Configuration for HTTP 307 Temporary Redirect
Setting up NGINX to handle a 307 Temporary Redirect:
server {
    listen 80;
    server_name example.com;
    location /original-resource {
        return 307 /temporary-resource;
    }
}HTTP 306 (Unused) HTTP 308 Permanent Redirect (Experimental)