308 Permanent Redirect
This is an educational reference page about HTTP 308 Permanent Redirect. The page itself is served as 200 OK so it can be indexed as HTTP documentation.
This and all future requests should be directed to the given URI. 308 parallel the behaviour of 301, but does not allow the HTTP method to change. So, for example, submitting a form to a permanently redirected resource may continue smoothly.
Specification
Registered in the IANA HTTP Status Code Registry as Permanent Redirect. Defined in RFC 9110, Section 15.4.9.
What it means
HTTP 308 means the resource permanently moved and the client must preserve the request method and body.
Common causes
- Permanent API endpoint moves where POST, PUT, or PATCH must not become GET.
- Permanent URL canonicalization with strict method preservation.
- Modern redirects replacing ambiguous 301 behavior for non-GET requests.
How to fix it
- Use an absolute Location header for the permanent target.
- Update clients, docs, links, and sitemap URLs to the new target.
- Use 307 instead when the move is temporary.
Example response
HTTP/1.1 308 Permanent Redirect
Location: https://api.example.com/v2/resource
Developer notes
308 is permanent like 301, but unlike many 301 implementations it preserves the HTTP method.
Header and content rules
What RFC 9110 says about a 308 response, quoted from the RFC.
- SHOULD (server; Location): Send Location with the new permanent URI. Table row
The server SHOULD generate a Location header field in the response containing a preferred URI reference for the new permanent URI. RFC 9110 §15.4.9
The same rule is in the response obligations table and its JSON.