The resource has been permanently moved to a new URI, and the client must preserve the original HTTP method.
The 308 Permanent Redirect status code indicates that the target resource has been assigned a new permanent URI. Unlike a 301, the 308 requires the client to preserve the original HTTP method and request body when following the redirect. A POST remains a POST, a PUT remains a PUT -- the method is never changed to GET.
A 308 redirect is used when a resource has permanently moved to a new URL and it is critical that the HTTP method be preserved during the redirect. This is particularly important for API endpoints where clients send POST, PUT, or DELETE requests -- changing these to GET (as 301 allows) would break the intended operation.
Common scenarios include API version migrations (e.g., /api/v1/users permanently moving to /api/v2/users), domain changes for API services, and restructuring URL paths for endpoints that accept non-GET methods.
api.old.com to api.new.com)Location header is correct before deploying, as correcting a cached 308 is difficult.POST /api/v1/users HTTP/1.1 Host: api.example.com Content-Type: application/json { "name": "Jane Doe", "email": "jane@example.com" }
HTTP/1.1 308 Permanent Redirect Location: https://api.example.com/api/v2/users
POST /api/v2/users HTTP/1.1 Host: api.example.com Content-Type: application/json { "name": "Jane Doe", "email": "jane@example.com" }
Monitor redirect chains, track method preservation, and detect broken API redirects instantly.
Start Free Monitoring