A 308 redirect is an HTTP status code that indicates a permanent redirect while preserving the original request method. It combines the permanence semantics of a 301 with the method preservation guarantee of a 307. If a POST request receives a 308 response, the browser must resend the POST to the new URL, and it should use the new URL for all future requests.
The 308 status code was defined in RFC 7538 to fill a gap in the HTTP specification. Before 308, there was no way to indicate a permanent redirect that preserved the request method. The 301 code, while permanent, allowed browsers to change POST requests to GET. The 308 code provides a clean solution for scenarios requiring both permanence and method preservation. Web protocol books on Amazon explain the specification.
In practice, 308 redirects are used in API versioning, permanent endpoint migrations, and HTTPS enforcement where POST requests must be preserved. For URL shortening services, 308 is rarely needed since most redirects involve GET requests from browser navigation.
Browser support for 308 is now universal across modern browsers, though older clients may not handle it correctly. When targeting a broad audience, it is important to verify that the client population supports 308 before relying on it. Browser compatibility books on Amazon discuss compatibility considerations.