308 Permanent Redirect
Uso
Cuando se recibe el código de estado 308 Permanent Redirect, se espera que los clientes actualicen los enlaces almacenados con el nuevo URI. El nuevo URI se indica en la cabecera Location y el cliente lo utiliza para la redirección automática.
Esta respuesta es habitual cuando los servidores migran a un dominio nuevo o reorganizan su estructura interna de archivos sin intención de volver al URI anterior.
El código de estado 308 Permanent Redirect se diferencia del 301 en un aspecto decisivo: el cliente debe conservar el método de la solicitud original. Una respuesta 301 permite al cliente convertir una solicitud POST en una solicitud GET al seguir la redirección. Un 308 Permanent Redirect exige que la solicitud posterior utilice el mismo método que la original. Esto convierte al 308 en la opción correcta cuando importa conservar el método, como en los endpoints de API y los envíos de formularios. El código de estado 308 se definió originalmente en una especificación independiente antes de incorporarse al estándar HTTP principal.
Impacto en SEO
Google trata el 308 de forma idéntica al 301. Ambos son redirecciones permanentes y una señal fuerte de que el destino de la redirección es el canónico. Las señales de posicionamiento se transfieren del URL antiguo al nuevo. Google sigue hasta 10 saltos de redirección. El contenido de los URL de redirección intermedios se ignora. La única diferencia entre 301 y 308 es la conservación del método, algo relevante para los endpoints de API pero no para el rastreo de los motores de búsqueda. Redirigir con un 308 los URL eliminados a la página de inicio o a una página de categoría genérica es detectado por Google como un soft 404.
Ejemplo
El cliente envía una solicitud POST a un endpoint de API. El servidor responde con 308 Permanent Redirect para indicar que el endpoint se ha trasladado. El cliente debe repetir la solicitud POST, incluido el cuerpo original, en la nueva Location.
Solicitud
POST /api/v1/orders HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 35
{"item": "widget", "quantity": 10}
Respuesta
HTTP/1.1 308 Permanent Redirect
Location: http://example.com/api/v2/orders
Content-Type: text/html; charset=UTF-8
Content-Length: 118
<h1>API endpoint moved</h1>
<body>
The orders endpoint has moved to
<a href=/api/v2/orders>/api/v2/orders</a>.
</body>
Referencias de código
.NET
HttpStatusCode.PermanentRedirect
Rust
http::StatusCode::PERMANENT_REDIRECT
Rails
:permanent_redirect
Go
http.StatusPermanentRedirect
Symfony
Response::HTTP_PERMANENTLY_REDIRECT
Python3.5+
http.HTTPStatus.PERMANENT_REDIRECT
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_PERMANENT_REDIRECT
Angular
@angular/common/http/HttpStatusCode.PermanentRedirect