HTTP 308 — Permanent Redirect
HTTP 308
Permanent Redirect
Like 301, but the client must repeat the request with the same method and body.
What 308 actually means
The permanent counterpart to 307. It means what 301 means — this URL has moved for good — while guaranteeing that a POST stays a POST rather than being rewritten as a GET. Support is universal in current browsers, and search engines treat it the same way they treat a 301, so for a permanent move of anything that accepts form or API submissions, this is the better code.
Common causes
- A permanent domain or path change on an endpoint that accepts POST
- Canonicalising an API base URL
- Enforcing HTTPS on endpoints that receive form submissions
If you're just trying to view the page
- Nothing — the browser follows this and the new URL is the one to bookmark
- Like 301, browsers cache this hard; use a private window if you suspect a stale redirect
If it's your site
- Prefer 308 over 301 for anything non-GET; a 301 can silently drop the request body
- As with 301, be certain before you ship it — caching makes it very hard to reverse
- Point straight at the final URL rather than chaining through intermediate redirects
Reference
- Status code
- 308
- Reason phrase
- Permanent Redirect
- Category
- 3xx — Redirection
- Cacheable by default
- Yes
- Defined in
- RFC 9110 §15.4.9
Common questions
- What does HTTP 308 mean?
- Like 301, but the client must repeat the request with the same method and body. The permanent counterpart to 307. It means what 301 means — this URL has moved for good — while guaranteeing that a POST stays a POST rather than being rewritten as a GET.
- How do I fix a 308 error?
- Nothing — the browser follows this and the new URL is the one to bookmark
- Is 308 a client error or a server error?
- 308 is in the 3xx range, which means redirection. It is not an error at all.
Related pages
- 301 Moved Permanently The URL has permanently moved and clients should use the new one from now on.
- 302 Found The resource is temporarily at a different URL; keep using the original one.
- 304 Not Modified Your cached copy is still current, so the server is not sending the file again.
- 307 Temporary Redirect Like 302, but the client must repeat the request with the same method and body.
- 303 See Other The request succeeded; now go and GET a different URL to see the result.
- 300 Multiple Choices The requested URL has several representations and the server is not choosing bet
- 305 Use Proxy A deprecated code telling the client to repeat the request through a specific pr
- 306 (Unused) A reserved code that was used in an old draft and is now permanently unassigned.