3xx Redirection · RFC 9110 §15.4.9

308 Permanent Redirect

A permanent redirect that preserves the request method and body.

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.

  • 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.