HTTPQUERY
Español

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