Redirección HTTP: 301 (permanente) vs 302 (temporal)


¿Se supone que el cliente debe comportarse de manera diferente? ¿Cómo?

Author: mikemaccana, 2009-09-08

6 answers

El estado 301 significa que el recurso (página) se mueve permanentemente a una nueva ubicación. El cliente / navegador no debe intentar solicitar la ubicación original, sino utilizar la nueva ubicación a partir de ahora.

El estado 302 significa que el recurso se encuentra temporalmente en otro lugar, y el cliente/navegador debe continuar solicitando la url original.

 510
Author: Philippe Leybaert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-08 11:05:06

Cuando una araña de motor de búsqueda encuentra el código de estado 301 en el encabezado de respuesta de una página web, entiende que esta página web ya no existe, busca el encabezado de ubicación en respuesta elija la nueva URL y reemplace la URL indexada con la nueva y también transfiera pagerank.

Así que el motor de búsqueda actualiza todas las URL indexadas que ya no existen (se encontró 301) con la nueva URL, esto retendrá el tráfico de su antigua página web, pagerank y lo desviará a la nueva (no perderá el tráfico de página web antigua).

Navegador: si un navegador encuentra el código de estado 301, almacena en caché la asignación de la URL antigua con la nueva URL, el cliente/navegador no intentará solicitar la ubicación original, sino que utilizará la nueva ubicación a partir de ahora a menos que se borre la caché.

introduzca la descripción de la imagen aquí

Cuando una araña de motor de búsqueda encuentra el estado 302 de una página web, solo redirigirá temporalmente a la nueva ubicación y rastreará ambas páginas. La antigua URL de la página web todavía existe en la base de datos del motor de búsqueda y siempre intenta solicitar la ubicación antigua y rastrearla. El cliente / navegador intentará solicitar la ubicación original.

introduzca la descripción de la imagen aquí

Leer más sobre cómo implementarlo en asp.net c# y cuál es el impacto en los motores de búsqueda - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet-csharp-Implementation.html

 90
Author: Rohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-16 22:48:30

Principalmente 301 vs 302 es importante para la indexación en los motores de búsqueda, ya que sus rastreadores lo tienen en cuenta y transfieren PageRank cuando usan 301.

Ver La respuesta de Peter Lee para más detalles.

 29
Author: Residuum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-20 19:43:57

301 es que al recurso solicitado se le ha asignado un nuevo URI permanente y cualquier las futuras referencias a este recurso deben hacerse utilizando uno de los URIs devueltos. 302 es que el recurso solicitado reside temporalmente bajo un URI diferente. Dado que la redirección puede ser alterada en ocasiones, el cliente DEBE continúe utilizando el URI de solicitud para solicitudes futuras. Esta respuesta es solo se puede acceder a la caché si se indica mediante un encabezado Cache-Control o Caduca campo.

 17
Author: Peter Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-07 05:08:07

301 las redirecciones se almacenan en caché indefinidamente (al menos por algunos navegadores).

Esto significa que, si configura un 301, visita esa página, no solo se le redirige, sino que la redirección se almacena en caché.

Cuando vuelve a visitar esa página, su navegador* ni siquiera se molesta en solicitar esa URL, solo va al destino de redirección en caché.

La única manera de deshacer un 301 para un visitante con esa redirección en Caché, es volver a redirigir a la URL original**. En ese caso, el navegador se dará cuenta del bucle, y finalmente realmente solicitar la URL introducida.

Obviamente, eso no es una opción si usted decidió 301 a facebook o cualquier otro recurso que no está totalmente bajo control.

Desafortunadamente, muchos proveedores de alojamiento ofrecen una característica en su Interfaz de administración simplemente llamada "Redirección", que hace una redirección 301. Si estás usando esto para redirigir temporalmente tu dominio a Facebook como una página que viene pronto, básicamente estás jodido.

*al menos Chrome y Firefox, de acuerdo con ¿Cuánto tiempo los navegadores caché HTTP 301s?. Lo acabo de probar con Chrome 45. Editar: Safari 7.0.6 en Mac también almacena en caché, un reinicio del navegador no ayudó (El enlace dice que en Safari 5 en Windows sí ayuda.)

**Probé javascript window.location = '', porque sería la solución que se podría aplicar en la mayoría de los casos - no funciona. Resulta en un bucle infinito no detectado. Sin embargo, php header('Location: new.url') rompe el bucle

En pocas palabras: solo use 301s si estás absolutamente seguro de que nunca volverás a usar esa URL. Por lo general, nunca en la raíz dir (example.com/)

 14
Author: Sebastian Schmid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:04

El problema principal con 301 es que el navegador almacenará en caché la redirección incluso si deshabilitó la redirección desde el nivel del servidor.

Siempre es mejor usar 302 si está habilitando la redirección para una ventana de mantenimiento corta.

 7
Author: Jobin Joseph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-12 10:23:07