8

Esta es una pregunta de seguimiento al Using 301/303/307 redirects for dynamic short urls, donde trato de determinar el mejor método para implementar la redirección de URL cortas cuando la URL de destino cambiará con frecuencia.Evitar el almacenamiento en caché de redireccionamiento 301

Si bien parece que las redirecciones 301 y 307 funcionan de la misma manera, el problema que me preocupa es el almacenamiento en caché de redireccionamiento 301 (como se documentó here) - es la mejor manera de evitar el uso de 307 redireccionamientos (supongo ¿Los redireccionamientos 307 nunca se almacenarán en caché?), O para enviar explícitamente un encabezado sin caché ("Control de caché: no-caché, debe revalidar")?

+0

relacionado: http://stackoverflow.com/questions/12192590/how-to-do-a-non-cached-301-redirect/19003320#19003320 –

Respuesta

16

No intente evitar 301 el almacenamiento en caché. Si no desea que ningún agente de usuario guarde en caché su redireccionamiento, simplemente no use un redireccionamiento 301. En otras palabras, 301 almacenamiento en caché está aquí para quedarse, y semánticamente, es permanente redirigir, por lo que si está planeando cambiar la URL de destino, 301 no es el código de estado correcto para usar. Por otro lado, 307 responses are not cached by default.

+3

Su interpretación infringe la especificación HTTP. Los clientes deben seguir 'Cache-Control' cuando está presente en un 301. – Gili

+0

@Gili sí, los clientes deben respetar Cache-Control, pero un 301 sigue siendo * permanente *, y no debe usarse si el redireccionamiento no está destinado a ser permanente. Debido a que es permanente, es cachable por defecto, tal como se define en https://tools.ietf.org/html/rfc2616#section-10.3.2 –

+0

301 no tiene que ser * permanente * (esa es simplemente la regla de caché predeterminada). De acuerdo con http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-24#section-6.4.2 'Una respuesta 301 es almacenable en caché a menos que se indique [...] de otra manera mediante controles de caché explícitos. donde 'controles de caché explícitos' significa' Cache-Control' y encabezados relacionados. – Gili

8

En situaciones en las que desea el comportamiento que trae un redireccionamiento 301, como la actualización de marcadores del navegador y el cambio de URL en google bot, pero al mismo tiempo desea rastrear los redireccionamientos o realizar algún otro tipo de funcionalidad que siempre se puede añadir las cabeceras de control de caché a "no caché"

HTTP/1.0 301 Moved Permanently 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Expires: Sat, 26 Jul 1997 05:00:00 GMT 
Location: http://example.com 

en PHP que tiene este aspecto:

header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); 
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
header('Location:'.$url, true, 301); 

relacionados: https://stackoverflow.com/a/19003320/175071

Cuestiones relacionadas