308 Permanent Redirect
Same as 301 but the request method and body must be preserved when following the redirect.
Status
HTTP/1.1 308 Permanent Redirect
Details
- Category: 3xx
- Status: Standard. Registered with IANA and defined by a current standards-track RFC.
- Specification: RFC 9110 §15.4.9
- Cacheable: Cacheable by default
- Response body: Allowed
- Retry: Safe to retry
308 is the method-preserving permanent redirect. Like 301 it tells clients and search engines to update their references, and like 307 it forbids rewriting a POST into a GET.
For API migrations it is the correct permanent code: callers update their base URL and their write requests keep working through the transition. For plain page moves 301 remains the more widely understood option, and both pass ranking signals.
Headers
- Location: Required. The new permanent URL, to be requested with the original method.
Common causes
- An API moved to a new host or path permanently.
- A canonical HTTPS or host redirect configured to preserve methods.
How to fix it
As the client
- Update the stored base URL and replay the original method against the new location.
- Confirm the client library follows 308 for non-GET methods. Older versions of several HTTP clients did not.
As the server
- Prefer 308 over 301 for endpoints that accept POST, PUT, PATCH, or DELETE.
- Keep the redirect in place long enough for cached clients and integrations to migrate.
Examples
PUT /v1/items/44 HTTP/1.1
Host: old-api.example.com
Content-Type: application/json
{"name":"widget"}
HTTP/1.1 308 Permanent Redirect
Location: https://api.example.com/v1/items/44