Ejemplos de 302 vs 303

Respuestas:

35

La descripción en la página a la que vinculó parece ser bastante descriptiva de su propósito:

Un redireccionamiento 302 indica que el redireccionamiento es temporal ; los clientes deben verificar la URL original en futuras solicitudes.

Una redirección 303 está destinada a redirigir una POSTsolicitud a un GETrecurso (de lo contrario, el cliente supone que el método de solicitud para la nueva ubicación es el mismo que para el recurso original).

Si está redirigiendo a un cliente como parte de su aplicación web pero espera que siempre comiencen en la aplicación web (por ejemplo, un acortador de URL), una redirección 302 parece tener sentido. Una redirección 303 se utiliza cuando recibe POSTdatos de un cliente (por ejemplo, un envío de formulario) y desea redirigirlos a una nueva página web para recuperarlos en GETlugar de POST(por ejemplo, una solicitud de página estándar).

Pero vea esta nota de las definiciones del código de estado: la mayoría de los clientes harán lo mismo para un 302 o 303:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
larsks
fuente
44
Claro pero equivocado. Una redirección 303 no es permanente. El RFC dice "La respuesta 303 NO DEBE almacenarse en caché" . La descripción que ha proporcionado aquí coincide con una redirección 301.
Ladadadada
2
Mea culpa. Tenía 301 y 303 al revés. He actualizado la respuesta.
larsks
ahora hay 308
Miranda
Creo que es un poco engañoso sugerir que 303 está "destinado" a redirigir un POST a un GET - punto final. La especificación sugiere que 303 trata más sobre la disponibilidad de una representación de un recurso a través del método solicitado originalmente. Si, por ejemplo, tengo una gran imagen protegida por derechos solo disponible para usuarios autenticados, podría usar un 303 para redirigir a los usuarios no autenticados a una imagen más pequeña. El método de solicitud utilizado en tal caso es irrelevante.
beaudet
El RFC dice "Este método existe principalmente para permitir la salida de un script activado por POST para redirigir el agente de usuario a un recurso seleccionado". y "La respuesta a la solicitud se puede encontrar bajo un URI diferente y DEBERÍA recuperarse utilizando un método GET en ese recurso". Creo que coincide bastante con lo que dije (hace tantos años), pero estoy seguro de que hay espacio para la interpretación.
Larsks
15

Hay cuatro tipos diferentes de redireccionamiento (actualmente). Originalmente solo había dos, pero la mayoría de los clientes implementaron la redirección 302 de forma incorrecta, por lo que se agregaron dos más para aclarar la diferencia entre los dos comportamientos posibles diferentes al recibir un 302.

El RFC al que se vinculó indica esto en la sección de redireccionamientos 302:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
  1. Una redirección 301 es una redirección permanente. Se puede almacenar en caché y cualquier marcador de esta URL debe actualizarse para que apunte a la nueva URL.
  2. Una redirección 302 es una redirección temporal. No se puede almacenar en caché de forma predeterminada y se debe volver a solicitar cada vez (pero puede anular esto con los encabezados de almacenamiento en caché). La solicitud de seguimiento debe usar el mismo método (POST, GET, CONNECT, PUT, DELETE, etc.) que la solicitud original y para cualquier otra cosa que no sea GET y HEAD, el cliente debe avisar al usuario antes de realizar la solicitud. Esta es la parte en que los clientes se equivocaron y la mayoría de ellos cambia el método para la solicitud de seguimiento a GET, independientemente del método original.
  3. Una redirección 303 es lo mismo que una 302, excepto que la solicitud de seguimiento ahora se cambia explícitamente a una solicitud GET y no se requiere confirmación.
  4. Una redirección 307 es igual a una 302, excepto que la solicitud de seguimiento ahora es explícitamente la misma que la solicitud original y se debe obtener la confirmación del usuario para los métodos de solicitud que no sean GET y HEAD.

Los clientes mayores pueden no entender la redirección 303. Cualquier cosa que haga una solicitud HTTP / 1.1 debería comprender una respuesta 303.

Es posible considerar 300 y 305 respuestas como redireccionamientos, lo que significa que hay seis tipos diferentes.

Ladadadada
fuente
0

Los tipos de redireccionamiento (301,302,303 ...) utilizados tienen un gran impacto en cómo los motores de búsqueda indexarán y clasificarán el contenido. Algunas arañas pueden incluso negarse a indexar contenido redirigido temporalmente. Los detalles se pueden encontrar en varias publicaciones de SEO ...

rackandboneman
fuente