Diferencia entre los códigos de redirección HTTP


Las diferencias entre los diversos códigos de redirección HTTP 3XX no están claras para mí. Sí, he leído la especificación, pero parece haber cierta discrepancia entre la práctica estándar y real aquí.

El código de redirección 301 parece suficientemente claro: Esto significa que el recurso se movió permanentemente a otro URI, y las solicitudes futuras deberían usar ese URI.

Y el código de redirección 307 también parece claro: significa que la redirección es temporal, y las solicitudes futuras aún deben usar URI original.

Pero no puedo decir cuál es la diferencia entre 302 y 303, o por qué cualquiera de ellos es realmente diferente de 301. Parece que 302 fue originalmente pensado para ser un temporal redireccionamiento, (como 307), pero en la práctica, la mayoría de los navegadores lo trataron como un 303. Pero ¿cuál es la diferencia entre un 303 y un 301? Se supone que 301significa que la redirección es más permanente?

Author: hippietrail, 2011-01-22

2 answers

  • 301: redirección Permanente. Los clientes que realicen solicitudes posteriores para este recurso deben usar el nuevo URI. Los clientes deben no seguir la redirección automáticamente para las solicitudes POST/PUT/DELETE.
  • 302: Redireccionar por una razón indefinida. Los clientes que realicen solicitudes posteriores para este recurso deben no utilizar el nuevo URI. Los clientes deben no seguir la redirección automáticamente para las solicitudes POST/PUT/DELETE.
  • 303: Redireccionar por una razón indefinida. Por lo general, ' Operación ha completado, continuar en otro lugar.'Los clientes que realicen solicitudes posteriores para este recurso deben no utilizar el nuevo URI. Los clientes debenseguir la redirección para las solicitudes POST/PUT/DELETE, pero usar GET para la solicitud de seguimiento.
  • 307: redirección Temporal. El recurso puede regresar a esta ubicación en un momento posterior. Los clientes que realicen solicitudes posteriores para este recurso deben usar el URI antiguo. Los clientes deben no siga la redirección automáticamente para las solicitudes POST/PUT/DELETE.

Yo personalmente recomiendo evitar 302 si usted tiene la opción. Muchos clientes no siguen las especificaciones cuando se encuentran con un 302. Para redirecciones temporales, debe usar 303 o 307, dependiendo del tipo de comportamiento que desee en solicitudes que no sean GET. Prefiera 307 a 303 a menos que necesite el comportamiento alternativo en POST/PUT/DELETE.

 120
Author: Bob Aman,
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-06-17 06:50:24

La diferencia entre 303 y 307 es esta:

303: Ver otro. La solicitud se recibe correctamente, pero los resultados deben ser recuperados usando un GET en la url de redireccionamiento.

307: redirección Temporal. Toda la solicitud debe ser redirigida a la nueva url. Cualquier dato de post debe ser re-publicado.

Tenga en cuenta que 302 estaba destinado a tener el comportamiento de 307, pero la mayoría de los navegadores lo implementaron como el comportamiento de 303 (los cuales no existen en ese entonces). Por lo tanto, esos dos nuevos códigos se introdujeron para sustituir al 302.

La diferencia entre 301 y 303:

301: El documento se mueve. Las solicitudes futuras deben usar la nueva url. Esta url está obsoleta.

Nota: Tenga cuidado con este código. Los navegadores y proxies tienden a aplicar un almacenamiento en caché realmente agresivo, por lo que si responde con un 301, puede tomar mucho tiempo para que alguien vuelva a visitar esa url.

303: Se recibe la solicitud correctamente. Cualquier solicitud PUT se procesa. El documento resultante se puede recuperar desde la url de redirección. La solicitud futura aún debe ir a la url original.

 69
Author: GolezTrol,
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-02-18 08:55:08