HTTPfy

308 Permanent Redirect

Permanent redirect that requires the client to keep the same method and body.

308 at a glance

Code
308
Name
Permanent Redirect
Class
3xx Redirection
Status
IANA-registered standard code
Defined in
RFC 9110, Section 15.4.9
Cacheable by default
Yes, heuristically cacheable (RFC 9110 section 15.1): without Cache-Control or Expires, caches may store it and pick a freshness lifetime themselves. Send explicit Cache-Control to stay in control.

What 308 means

308 Permanent Redirect is to 301 what 307 is to 302: permanent, and the method and body must not change. It was introduced in RFC 7538 and is now part of RFC 9110. Search engines treat it like a 301, and it is heuristically cacheable.

What typically causes a 308

  • Next.js and Vercel use 308 for permanent redirects and trailing-slash rules by default.
  • Google Cloud, GitHub and others for permanently moved API endpoints.
  • Cloudflare redirect rules configured with 308.

Fix it on the server

  • Prefer 308 over 301 for APIs and form endpoints that accept POST.
  • As with 301, test with a temporary redirect first, because 308 is cached.

Fix it as a client or visitor

  • Very old clients (pre-2015) may not understand 308 and treat it as 300; update the client.

Headers that go with 308

HeaderRole
LocationThe new permanent URL.

Example response

HTTP/1.1 308 Permanent Redirect
Location: https://example.com/blog/
Content-Length: 0

Opens the HTTP headers tool with your URL filled in; it shows the status line and headers of every redirect hop.

Checking a whole domain's redirects? The HTTP status checker follows http, https, www and non-www variants and shows every hop.