Ir al contenido
EuroVPSEuroVPS

Guía completa de los códigos de estado HTTP: serie 300

Los códigos de estado HTTP 300 están reservados a las redirecciones. La mayoría de las redirecciones son transparentes para el usuario final y las gestiona por completo el user-agent.

Por Thomas

Actualizado el 22 de octubre de 20266 min de lectura
Imagen de portada: guía de errores HTTP, serie 300

Para entender mejor por qué las redirecciones son tan importantes, ayuda entender por qué alguien usaría una redirección, para empezar.

Las redirecciones suelen ser consecuencia de un cambio. Puede ser un cambio de recursos informáticos, un cambio de terminología de marketing, un cambio de política, un cambio de estrategia SEO o un cambio en la operativa del negocio. En algún sitio, algo cambió y exige que el mismo URI sea accesible en una ubicación distinta.

Cuando se hacen cambios, los motores de búsqueda y otras fuentes conservarán los enlaces antiguos hasta que el sitio se reindexe.

La alternativa a una redirección sería un error 404 «document not found».

Un escenario extremo que obligaría a redirigir a un user-agent sería una empresa que reorganiza su línea de productos. Digamos, por ejemplo, que ACME Co. trasladó la línea Widgets a ACME Labs. La política actual de ACME dicta una estructura web del tipo: acmeco/{division}/{productline}.

Así que ACME podría tener:

www.acme.com www.acme.com/marketing/seotechnologies/ www.acme.com/marketing/billboards/ www.acme.com/consumergoods/sports/ www.acme.com/consumergoods/clothing/ www.acme.com/consumergoods/widgets/ www.acme.com/labs/widgets/ www.acme.com/labs/foobars/ www.acme.com/labs/betaproducts/

ACME Widgets ha estado en www.acme.com/consumergoods/widgets/ durante los últimos 5 años y recibe decenas de miles de visitas por hora en esa ubicación.

¿Se imagina cuántos ingresos podría costarle a ACME Co. este simple traslado, en ventas perdidas, en atención al cliente respondiendo a quejas, y en directivos atendiendo el teléfono para hacer declaraciones oficiales sobre la querida línea Widget?

¿Y los motores de búsqueda? Buena parte de las ventas de Widgets de ACME Co. procede de visitas desde motores de búsqueda. Por no hablar de la campaña de Google Ads y de la URL en folletos y tarjetas de visita.

Una redirección de la serie 300 puede resolver el problema para todos en ACME Co. ACME puede simplemente configurar el servidor web para que redirija todas las peticiones a www.acme.com/consumergoods/widgets/ hacia www.acme.com/labs/widgets/.

(hr)

Ejemplo real de una redirección 301

En EuroVPS usamos una redirección 301 para asegurarnos de que los visitantes usan el protocolo seguro HTTPS.

Así es exactamente como la redirección 301 garantiza que cada visitante usará HTTPS al visitar EuroVPS:

  1. el user-agent solicita http://www.eurovps.com/
  2. el servidor web responde con un código de estado 301
  3. el servidor web establece una cabecera Location hacia la versión https
  4. la mayoría de los user-agents redirigirán automáticamente a la nueva URL
Redirección cuando no se sigue la cabecera Location
se muestra un mensaje a los user-agents que no respetan la cabecera Location.

Las redirecciones pueden hacerse en lenguajes de scripting como Python Django, PHP y ASP .Net. Sin embargo, una solución más robusta es dejar las redirecciones en manos del servidor web con una regla de rewrite.

Redirección en PHP:

<?php // Permanent 301 Redirect via PHP header("HTTP/1.1 301 Moved Permanently"); header("Location: https://eurovps.com/"); exit; // stop the script once the redirect is sent

El problema de hacer redirecciones en esta capa tan alta es que podríamos acabar editando 100 páginas. O peor aún, retocando código en un sistema de gestión de contenidos que quizá no haga las redirecciones como querríamos.

Una solución mucho más elegante es que el servidor web haga toda la redirección por nosotros.

En Apache las redirecciones podrían hacerse así:

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

En nginx la misma redirección es una línea en el server block que escucha en el puerto 80:

server { listen 80; server_name www.example.com; return 301 https://$host$request_uri; }

(hr)

Redirecciones con código de estado 300

300 Multiple Choices

300 Multiple Choices es una redirección que rara vez se usa en el mundo real. 300 Multiple Choices aparece cuando un recurso solicitado apunta a varios destinos para el mismo documento solicitado. Se presenta al usuario final una elección de acción, para que seleccione la deseada.

301 Moved Permanently

Las redirecciones 301 son habituales porque los motores de búsqueda tratan un 301 como un traslado permanente: actualizan su índice al nuevo URI y trasladan las señales de posicionamiento.

Cuando un cliente encuentra un 301, los marcadores y los user-agents automatizados deberían actualizarse al nuevo URI.

302 Found

Las redirecciones 302 deben usarse cuando un URI solicitado está temporalmente en una nueva ubicación. El user-agent sigue la cabecera Location hasta el URI temporal. Por razones históricas, la mayoría de los clientes convierten un POST en un GET cuando siguen un 302. Use un 307 cuando el método deba conservarse.

A diferencia del 301, los user-agents deben seguir usando el URI original, porque se trata de una redirección temporal.

303 See Other

El 303 es principalmente para peticiones POST y PUT que se llevan a un URI distinto del que el user-agent solicitó originalmente en su petición POST o PUT.

Un ejemplo podría ser la subida de un archivo grande que puede tardar unos minutos:

  1. el user-agent envía un archivo grande mediante PUT o POST
  2. el archivo va destinado al URI original
  3. el servidor web devuelve un 303 redirigiendo a una página de estado de la subida
  4. el user-agent usará GET a través del 303, solicitando una página de estado de la subida

304 Not Modified

El 304 Not Modified se usa con fines de caching. El 304 se envía como estado a un user-agent que solicita comprobar el estado actual de una página en cache.

Si la página solicitada sigue vigente, el servidor responde con 304 y sin cuerpo, y el user-agent muestra su copia en cache al usuario final.

Redirección 304
Arriba, una comprobación sobre un archivo javascript en cache.

305 Use Proxy (obsoleto)

El 305 Use Proxy está obsoleto. La especificación HTTP actual, RFC 9110, lo lista como ya no usado, y los navegadores no actúan sobre él. No lo use.

307 Temporary Redirect

El 307 es parecido al 302, pero exige que se use el mismo método de petición en el URI redirigido. Se usaría, por ejemplo, cuando una petición POST debe enviarse a otro URI.

Con un 302, la mayoría de los clientes cambian a una petición GET para obtener el URI redirigido.

308 Permanent Redirect

El 308 es la contrapartida permanente del 307. Como el 301, indica a los clientes que el recurso se ha trasladado definitivamente. Como el 307, exige que el cliente repita la petición con el mismo método. Úselo cuando un traslado permanente deba mantener un POST como POST.

Los códigos de estado de esta guía están definidos en RFC 9110 (HTTP Semantics).

Artículo relacionado: Guía completa de los códigos de estado HTTP: serie 400

Del archivo del blog de EuroVPS, publicado por primera vez el 12 de diciembre de 2019.

Todas las notas de campo