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)