What 308 means
The permanent counterpart of 307. Search engines treat it like a 301; clients must repeat the same method at the new URL, so POSTs are not silently converted to GETs.
Prefer 308 over 301 for API endpoints that accept writes; keep 301 for ordinary page moves where every client already handles it.
Common causes
- An API version or hostname moved permanently.
How to fix it
- Update clients to the new URL; the redirect is cached and cannot be easily revoked.
What it looks like
A typical response:
HTTP/1.1 308 Permanent Redirect Location: https://api.example.com/v2/orders
The same event in an nginx access log (the status is the number after the request line):
203.0.113.7 - - [10/Sep/2026:10:12:01 +0000] "GET /api/orders HTTP/1.1" 308 153 "-" "Mozilla/5.0"
Check it with curl
-i prints the status line and headers, and -w '%{http_code}' prints only the number, which is handy in scripts and health checks. Replace the URL with yours:
curl -i -L --max-redirs 5 https://example.com/old-path
Compare what curl sees with what the browser sees. A different status from the same URL usually means a cache, a CDN edge or a cookie is in the way.
Investigating a run of 308s? Paste the log excerpt into Log Share to get line numbers, highlighting and an expiring link for whoever is on call with you.
Related status codes
301Moved Permanently: The resource has a new permanent URL; clients and search engines should update.307Temporary Redirect: A temporary redirect that preserves the request method and body.
FAQ
Do old clients understand 308?
All current browsers and HTTP libraries do. Very old proxies may not; if that matters, use 301 for GET-only resources.