2009-09-08 16 views
311

¿Se supone que el cliente se comporte de manera diferente? ¿Cómo?Redirección HTTP: 301 (permanente) vs. 302 (temporal)

+0

[RFC 2616 - Códigos de estado HTTP] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) Podría repetir todo allí, pero lo dice claramente;) – Tiemen

+2

Vale la pena teniendo en cuenta que la especificación también proporciona códigos de estado 303 y 307 para redirecciones temporales más matizadas. –

Respuesta

489

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 usar 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.

+10

Gracias. ¿Significa esto que si uso un redireccionamiento 301 (permanente), el cliente puede decidir no recuperar nunca más la ubicación anterior y, en su lugar, usar siempre directamente la nueva URL? – flybywire

+14

¡Exactamente! De hecho, de acuerdo con las especificaciones, el cliente DEBERÍA ir siempre a la nueva ubicación. –

+2

¿Tiene esto algún efecto en los motores de búsqueda que recuerdan ciertas páginas de su sitio que ahora no están vinculadas? – rybo111

17

301 es que al recurso solicitado se le ha asignado un nuevo URI permanente y cualquier futura referencia a este recurso DEBE hacerse con uno de los URI devueltos. 302 es que el recurso solicitado reside temporalmente bajo un URI diferente. Dado que la redirección puede modificarse ocasionalmente, el cliente DEBERÍA continuar utilizando el URI de solicitud para futuras solicitudes. Esta respuesta es solo cachable si está indicada por un campo Cache-Control o Expires header .

+1

Entonces 301 tiene sentido, pero me está costando crear un buen ejemplo de uso para ** 302 **. –

+4

@ BobStein-VisiBone por ejemplo de la redirección 302: cree un archivo old.php con el código ' 'y archivo new.php -' 'y vaya al [enlace] (http://example.com/old.php). Se redirigirá y mostrará el texto "Soy nuevo". Luego reemplace el código en old.php por ' 'y también vaya al [enlace] (http://example.com/old.php). Verás el texto "Soy viejo". Si ha realizado la redirección 301 en old.php, habría visto el texto "Soy nuevo" incluso después de los cambios en el código de old.php. – Apostle

+1

@ BobStein-VisiBone Tengo una página que está en desuso y no se puede mostrar. Necesitamos hacer una nueva página pero no estaremos listos por un tiempo. Utilizamos una redirección temporal a una página existente que nos resulta útil para los visitantes. Una vez que se crea la página nueva, usaremos una redirección permanente a ella. – EddieC

28

Parcialmente 301 vs 302 es importante para la indexación en los motores de búsqueda, ya que sus rastreadores tener esto en cuenta y transferencia de PageRank cuando se utiliza 301.

Ver Peter Lee's answer para más detalles.

81

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 la cabecera de ubicación en respuesta elige la nueva URL y reemplaza la URL indexada por la nueva y también transferir pagerank.

Así que el motor de búsqueda actualiza toda URL indexada que ya no existe (301 encontrados) con la nueva URL, esto retendrá el tráfico de su página web anterior y lo desviará al nuevo (no perderá el tráfico de la página anterior))

Navegador: si un navegador encuentra 301 código de estado entonces se almacena en caché la asignación de la dirección URL anterior con la nueva dirección URL, el cliente/navegador no intentará solicitar la ubicación original pero el uso de la nueva ubicación de ahora en adelante a menos que el caché está despejado

enter image description here

Cuando una araña motor de búsqueda encuentra 302 de estado de una página web, sólo se volverá a dirigir temporalmente a la nueva ubicación y rastreo tanto de las páginas. La URL de página web anterior aún existe en la base de datos del motor de búsqueda y siempre intenta solicitar la ubicación anterior y rastrearla. El cliente/navegador aún intentará solicitar la ubicación original.

enter image description here

Lea 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

+11

upvote para destacar manualmente con el mouse/dispositivo de entrada. – ahnbizcad

+2

Mucho mejor respuesta IMO. Más claro sobre qué sucede exactamente en un nivel técnico, que es lo que la mayoría de la gente probablemente venga aquí. – DarkNeuron

11

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

Esto significa que, si configura un 301, visite esa página, no solo se redirigirá, sino que se redireccionará la redirección.

Cuando visita esa página otra vez, 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 redireccionar a la URL original **. En ese caso, el navegador notará el bucle, y finalmente realmente solicitará la URL ingresada.

Obviamente, esa no es una opción si decidió 301 a Facebook o cualquier otro recurso que no esté completamente bajo control.

Desafortunadamente, muchos proveedores de alojamiento ofrecen una función en su interfaz de administración llamada simplemente "Redirección", que hace una redirección 301. Si está utilizando esto para redirigir temporalmente su dominio a Facebook como próxima página, básicamente está jodido.

* al menos Chrome y Firefox, según How long do browsers cache HTTP 301s?. Sólo probado con Chrome 45. Editar: Safari 7.0.6 en Mac también almacena en caché, un reinicio del navegador no ayudó (. Enlace dice que en Safari 5 en Windows lo hace ayuda)

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

Conclusión: solo use 301 si está absolutamente seguro de que nunca volverá a usar esa URL. Por lo general, nunca en el directorio raíz (example.com/)

7

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

Siempre es mejor usar 302 si habilita la redirección para una ventana de mantenimiento breve.

Cuestiones relacionadas