Developer Tools

HTTP 308 Permanent Redirect

3xx Redirection. Like 301, but guarantees the request method and body won't change on the redirected request.

Runs in your browser. Your files and text never leave your device - nothing is uploaded.

3xx Redirection

What it means

Like 301, but guarantees the request method and body won't change on the redirected request.

PropertyDetail
Status class3xx Redirection
Defined inRFC 9110, Section 15.4.9 — First specified in 2014 and standardised by RFC 7538 in 2015; RFC 9110 replaced RFC 7538 in 2022.
Cacheable by defaultYes. RFC 9110 lists it as heuristically cacheable, so a cache may reuse it without explicit freshness headers unless Cache-Control says otherwise. As with 301, browsers may reuse it without asking the server again.
Who needs to actThe site owner sets it; clients follow it.

What does HTTP 308 Permanent Redirect mean?

HTTP 308 Permanent Redirect means the resource has moved to a new URL for good, given in the Location header, and the client must repeat the request there without changing the method or body. It is the method-preserving counterpart of 301. Browsers follow it and may cache it, and Google treats it the same as 301.

How 308 Permanent Redirect works

A 308 closes the gap 301 left open. Because browsers resend a POST that hits a 301 as a GET, permanently moving a form handler or API endpoint used to lose the request body. With 308 the client must send the same method and body to the new URL. Otherwise it behaves like 301: it is permanent, heuristically cacheable, and tells clients to update their references. RFC 9110 notes that 308 is much younger than its sibling codes, so very old clients might not recognise it; current browsers do.

Example 308 request and response

PUT /api/v1/profile HTTP/1.1
Host: api.example.com
Content-Type: application/json

HTTP/1.1 308 Permanent Redirect
Location: https://api.example.com/api/v2/profile

The client repeats the PUT, body included, at the v2 address and should use that address from now on.

When servers send 308 Permanent Redirect

  • Permanent moves of API endpoints that receive POST, PUT or DELETE.
  • Next.js permanentRedirect() and redirects configured with permanent: true.
  • Trailing-slash normalisation: Next.js, for example, answers /about/ with a 308 to /about by default.
  • HTTPS and domain migrations on hosts that use 308 for permanent redirects.

How to handle 308 Permanent Redirect

If you consume the API

  • Update the stored base URL to the new location rather than relying on the redirect forever.
  • Make sure your client can replay the request body when it follows the redirect.

If you run the site

  • Choose 308 when non-GET requests reach the old URL; for plain page moves, 301 and 308 behave the same in browsers and in Google.
  • Redirect each old URL directly to its final destination, and update internal links and sitemaps.
  • Send Cache-Control on the redirect if you might need to reverse it soon.

308 and SEO

Google's documentation lists 308 as equivalent to 301: it follows the redirect and uses it as a strong signal that the destination should be canonical, so the new URL replaces the old one in search results. There is no search reason to prefer one over the other. Pick 308 when request methods other than GET must survive the redirect.

Related status codes

Frequently asked questions

Sources

Other 3xx Redirection codes

Reviewed by Raja Jahangir · Last reviewed: October 7, 2026