¿Por cuánto tiempo los navegadores almacenan en caché los HTTP 301?

382

Estoy depurando un problema con un redireccionamiento permanente HTTP 301. Después de una prueba rápida, parece que Safari borra su caché de 301s cuando se reinicia, pero Firefox no lo hace.

¿Cuándo IE, Chrome, Firefox y Safari borran su caché de 301?

ACTUALIZACIÓN: por ejemplo, si quiero redirigir example1.coma example2.com, pero accidentalmente lo configuré para que redirija example3.com, eso es un problema. Puedo corregir el error, pero cualquier persona que haya visitado example1.commientras tanto habrá almacenado en caché la redirección incorrecta example3.comy, por lo tanto, no podrá comunicarse con ellos example1.comni example2.comhasta que se borre su caché. Después de la investigación, encuentro que no había Cache-Controly Expirescabeceras establecidas. Los encabezados para la respuesta 301 incorrecta habrían sido así:

HTTP/1.1 301 Moved Permanently
Date: Wed, 27 Feb 2013 12:05:53 GMT
Server: Apache/2.2.21 (Unix) DAV/2 PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: http://example3.com/
Content-Type: text/html

Mis propias pruebas muestran que:

  • IE7, IE8, Android 2.3.4 no se almacenan en caché.
  • Firefox 18.0.2, Safari 5.1.7 (en Windows 7) y Opera 12.14 todo caché, y borre el caché al reiniciar el navegador.
  • IE10 y Chrome 25 caché, pero no se borran al reiniciar el navegador, entonces , ¿ cuándo se borrarán?
Liam
fuente
77
Dígale a Chrome que necesitamos una salida de este agujero infernal 301: bugs.chromium.org/p/chromium/issues/…
BT
@BT ya que el problema afecta a todos los navegadores, en realidad solo el IETF podría solucionar esto, probablemente definiendo un tiempo de espera obligatorio en los 301 almacenados en caché que no tienen TTL, para que los navegadores eventualmente vuelvan a verificar sus suposiciones en caché.
McGuireV10
1
Comencé una discusión en la lista de correo de IETF sobre esto, si alguien que todavía sigue este tema tiene ganas de sopesar: lists.w3.org/Archives/Public/ietf-http-wg/2017OctDec/0363.html
McGuireV10

Respuestas:

300

Al menos dos navegadores, Chrome y Firefox, almacenarán en caché una redirección 301 sin fecha de vencimiento .

Es decir, permanecerá en caché mientras el caché del navegador pueda acomodarlo. Se eliminará de la memoria caché si la borra manualmente, o si las entradas de la memoria caché se purgan para dejar espacio para las nuevas.

Puede verificar esto al menos en Firefox yendo about:cachey buscándolo en la memoria caché del disco.

No sé sobre el comportamiento de otros navegadores, como IE10 / IE11. Sin embargo, dado que otros navegadores lo almacenan en caché indefinidamente, de todos modos tendrá que adaptarse a esto.

En todos los navegadores, incluido Chrome / Firefox, todavía es posible anular este comportamiento predeterminado utilizando encabezados, como se describe a continuación:

Nota: esta respuesta fue escrita en 2014 y el comportamiento del navegador puede cambiar con el tiempo.

Si no desea que la redirección se almacene en caché

Este almacenamiento en caché indefinido es solo el almacenamiento en caché predeterminado por estos navegadores en ausencia de encabezados de Cache-Control. La lógica es que está especificando una redirección "permanente" y no les está dando otras instrucciones de almacenamiento en caché, por lo que lo tratarán como si lo quisiera en caché indefinidamente.

Los navegadores aún respetan los encabezados Cache-Control y Expires como con cualquier otra respuesta, si se especifican.

Puede agregar encabezados como Cache-Control: max-age=3600o Expires: Thu, 01 Dec 2014 16:00:00 GMTa sus redireccionamientos 301. Incluso podría agregar Cache-Control: no-cachepara que el navegador Cache-Control: no-storeno lo almacene en caché de forma permanente o para que el navegador ni siquiera pueda almacenarlo en almacenamiento temporal.

Sin embargo, una mejor alternativa en mi opinión es utilizar una redirección 302 o 307. Esto no implica que los navegadores o las memorias caché sean redireccionamientos "permanentes" y, por lo tanto, no deberían almacenarse en memoria caché en ausencia de los encabezados de control de memoria caché.

Para mí, parece emitir una redirección 301, pero marcarla como no almacenable en caché va en contra del espíritu de la redirección 301, aunque pueda ser técnicamente válida. YMMV, y puede encontrar casos extremos en los que tiene sentido que una redirección "permanente" tenga un límite de tiempo.

Si anteriormente emitió una redirección 301 pero desea deshacerla

Si las personas aún tienen la redirección 301 en caché en su navegador, continuarán siendo llevadas a la página de destino, independientemente de si la página de origen todavía tiene la redirección en su lugar. Sus opciones para solucionar esto incluyen:

  • La mejor y más simple solución es emitir otra redirección 301 nuevamente.

    El navegador se dará cuenta de que está siendo redirigido a lo que antes pensaba que era una URL desarmada, y esto debería hacer que vuelva a buscar esa URL nuevamente para confirmar que la redirección anterior todavía no está allí.

    Editar: algunos comentarios arrojan dudas sobre esto, ver más abajo.

  • Si no tienes control sobre el sitio al que fue el objetivo de redireccionamiento anterior, entonces no tienes suerte. Intenta rogarle al propietario del sitio que te redirija a ti.

Además, es mejor prevenir que curar: evite una redirección 301 si no está seguro de querer desmantelar permanentemente la URL anterior.

thomasrutter
fuente
18
Además, ¿tiene alguna referencia que muestre que los navegadores manejan redireccionamientos permanentes circulares volviendo a buscar la URL original?
Kevin Christopher Henry
77
301 espalda redirección don `t trabajo, el navegador sigue caché de edad redireccionamiento 301 y veo bucle infinito
Yuriy Kolodovskyy
55
cómo lo hice la prueba: Hace algún tiempo, hice unas redireccionamiento 301 para http://www.SOMEHOST.coma https://www.SOMEHOST.com. Pero ahora http://www.SOMEHOST.comdebe ser el host principal para el sitio. Entonces, redirige desde https a http eliminado. Como muestra, hice la redirección 301 de https://www.SOMEHOST.coma http://www.SOMEHOST.com, pero veo el bucle. El navegador no volvió a buscar ...
Yuriy Kolodovskyy
8
Confirmo que la redirección hacia atrás (con una redirección PHP en mi caso) funciona perfectamente en Google Chrome siempre y cuando (obviamente) elimine la redirección 301 inicial.
Vincent Poirier
15
Puedo confirmar que la redirección hacia atrás funciona perfectamente bien. Los navegadores que ven el bucle de redireccionamiento invalidan las entradas de caché. Probado en IE11, Firefox 52, Safari 10, Chrome 57.
Munhitsu
258

Desde Chrome 71

Para borrar una redirección permanente, vaya a chrome: // settings / clearBrowserData y desde allí solo al borrar "imágenes y archivos en caché" se borró la redirección.

Cromo 48-70

Vaya a chrome: // net-internals. A la derecha de la barra de estado roja superior, haga clic en la flecha hacia abajo ▼ para abrir el menú desplegable y, en el grupo "Herramientas", elija "Borrar caché".

A partir de la versión 48, esto fue lo único que funcionó para mí para borrar un 301 en caché.

McGuireV10
fuente
14
A partir de la versión 54 de Chrome, desafortunadamente esto no funciona para mí.
pwagner
44
Pensándolo bien, realmente no respondí la pregunta real , "¿Cuánto tiempo los navegadores almacenan en caché un 301", y mi respuesta no ayudaría a nadie que redirigiera un sitio público donde probablemente necesite alguna forma de deshacer un 301 de forma permanente sin saber cuántos navegadores en la naturaleza han almacenado en caché la redirección, otras respuestas abordan parcialmente ese escenario. Mi respuesta es realmente útil solo para desarrolladores o escenarios de intranet donde puedes comunicarte con todos los usuarios afectados.
McGuireV10
1
Funciona en la versión 68.0.3440.106 de Chrome (versión oficial)
Thum Choon Tat
12
chrome: // net-internals ha sido destripado en Chrome 71. La sección desplegable / Herramientas desapareció. Existe un botón DNS> Caché de resolución de host> Botón Borrar caché de host, pero esto no funciona para eliminar los 301 almacenados en caché.
t-jam
52
En Chrome 71, chrome: // settings / clearBrowserData y desde allí solo al borrar "imágenes y archivos en caché" se borró la redirección.
Bemmu
179

Una respuesta que ayuda a aquellos que desean desesperadamente deshacerse del caché de redireccionamiento:

Chrome almacena en caché la redirección 301 infinitamente (en la memoria caché del disco local). Para borrar este caché:

  • abra sus DevTools (presione F12)
  • en la pestaña Red marque la casilla de verificación "Desactivar caché"
  • mantenga DevTools abierto y vuelva a cargar la página (presione F5)

Cuando todo esté bien, puede desmarcar "Desactivar caché" y todo continuará funcionando como se esperaba.

Olaf
fuente
14
Esto funciona e incluso después de volver a habilitar el almacenamiento en caché, la redirección se ha ido. ¡GRACIAS!
migg
2
Parece que esto no funciona para dominios apuntados a 127.0.0.1 a través del archivo de hosts locales. ¿Hay alguna otra opción para este caso?
pwagner
No funciona si la redirección, involuntariamente, apunta a otro puerto, como a partir localhost:8000de localhost(puerto 80). También borré todo el sitio / datos de la aplicación de localhost y localhost: 8000, pero tampoco ayudó.
Dennis98
3
Esta solución funciona en Chrome a partir del 16 de noviembre de 2019, versión 78.0.3904.97. Las otras soluciones ya no están disponibles. Después de que funcione, puede cerrar las herramientas del desarrollador y continuará funcionando correctamente.
Peter Wooster
Respuesta aceptada
Aysennoussi
43

Haga que el usuario envíe un formulario de publicación en esa URL y la redirección en caché desaparecerá :)

<body onload="document.forms[0].submit()">
<form action="https://forum.pirati.cz/unreadposts.html" method="post">
    <input type="submit" value="fix" />
</form>
</body>
Krtek Net
fuente
2
Estoy de acuerdo en que este es el mejor método que he encontrado para desenroscarlo.
esjay
A diferencia de otras respuestas, ¡este método es adecuado para resolver el problema de otras personas sin abrir la consola del desarrollador! gracias
Alexey Rytikov
44
fetch ('URL', {método: 'POST'}) debe hacer el truco de la misma manera. ¡Gracias! ¡Esto me salvó un poco de dolor de cabeza!
calvin
No puedo creer que esta sea la única forma que funcionó para mí (probé todos los otros métodos primero, incluso la consola fetch () falló debido a una política de seguridad entre sitios).
user36388
24

301es una respuesta almacenable en caché por RFC HTTP y los navegadores la almacenarán en caché dependiendo de los encabezados de almacenamiento en caché HTTP que tenga en la respuesta. Use FireBug o Charles para examinar los encabezados de respuesta para conocer la duración exacta de la respuesta que se almacenará en caché.

Si desea controlar la duración del almacenamiento en caché, puede usar los encabezados de respuesta HTTP Cache-Controly Expireshacer lo mismo. Alternativamente, si no desea almacenar en caché la 301respuesta, use los siguientes encabezados.

Cache-Control: no-store, no-cache, must-revalidate
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Alex J
fuente
12
Aunque técnicamente correcto, su respuesta no responde la pregunta de los usuarios y, por lo tanto, no responde la pregunta por la que vine aquí. ¿Cuándo caducan los navegadores principales existentes, sin caché con encabezado ed 301 que ya están en el navegador?
robar
Si alguien todavía está interesado, las instrucciones de este enlace pueden alternar el caché para 301.
Francisco Presencia
El enlace es para FF y no funcionó para mí. Instalé la extensión de desarrollador web 1.2.5 y utilicé FF 23.0.1
un phu del
La pregunta no fue respondida. La pregunta era, ¿por cuánto tiempo se guardará en caché la redirección si no se especificó una fecha de vencimiento
Dennis Flagg
22

Hay una manera muy simple de eliminar la memoria caché del navegador para redireccionamientos http, por ejemplo, 301, 307, etc.

Puede abrir el panel de red en la consola del desarrollador en Chrome. Seleccione la llamada de red. Haga clic derecho sobre él y luego haga clic en Borrar navegador de caché para eliminar la redirección en caché.

menú contextual de llamadas de red

Rajesh Paul
fuente
1
¡Muchas gracias! Solución simple y trabajado! Esta forma también debería funcionar en el futuro.
sgon00
16

¡¡Confirmado!! haga que el usuario envíe una solicitud de publicación a la URL afectada y se olvidará la redirección en caché.

Una ganancia rápida sería ingresar esto en la consola del navegador si puede:

fetch('example.com/affected/link', {method: 'post'}).then(() => {})

Útil si conoce el navegador afectado (especialmente durante el desarrollo).

Alternativamente , si tiene acceso a la página de redireccionamiento 301 anterior, puede agregar este script a la página y cada vez que se visita, el 301 en caché se olvidará.

Emeke Ajeh
fuente
Esto es similar al formulario de publicación anterior, solo que es menos esfuerzo.
jpswade
Eso es correcto @jpswade
Emeke Ajeh
12

Publicaré una respuesta que me ayudó:

ir a la url:

chrome://settings/clearBrowserData

debería invocar popup y luego ...

  • seleccionar sólo: cached images and files.
  • seleccione cuadro de tiempo: from beginning
Tribu John
fuente
Trabajando en Chrome 79!
webaholik
Trabajando en Chrome 80, gracias!
Joseph
6

como respuesta de @thomasrutter

Si anteriormente emitió una redirección 301 pero desea deshacerla

Si las personas aún tienen la redirección 301 en caché en su navegador, continuarán siendo llevadas a la página de destino, independientemente de si la página de origen todavía tiene la redirección en su lugar. Sus opciones para solucionar esto incluyen:

La mejor y más simple solución es emitir otra redirección 301 nuevamente.

El navegador se dará cuenta de que está siendo redirigido a lo que antes pensaba que era una URL fuera de servicio, y esto debería hacer que vuelva a buscar esa URL nuevamente para confirmar que la redirección anterior todavía no está allí.

Si no tienes control sobre el sitio al que fue el objetivo de redireccionamiento anterior, entonces no tienes suerte. Intenta rogarle al propietario del sitio que te redirija a ti.

De hecho, esto significa:

  1. a.com 301 a b.com

  2. eliminar el 301 de a.com

  3. agregue b.com 301 a a.com

Entonces funciona.

phil han
fuente
2
Pero entonces todavía tienes 301 de b.com por ahí: (- una solución sucia
BT
1
¿Puedes borrar una redirección emitiendo otro 301 desde una página diferente ? por ejemplo ( a.com301 -> b.com) (eliminar a.com301) (agregar a.com/abcdefg301 -> a.com) y obligar al cliente a ver de a.com/abcdefgalguna manera
nemec
Gracias funciona! Probado en IE11, Firefox 52, Safari 10, Chrome 57
Munhitsu
Tuve una situación en la que quería usar tanto a.com como b.com. Entonces b.com 301 a.com no era una opción. Nuestra solución fue pasar a HTTPS - no tuvimos redireccionamientos en HTTPS
rosell.dk
6

Tengo una solución simple que funcionó en todos los principales navegadores (última versión), incluye IE, Chrome y FF

  1. Ctrl + Shift + Supr
  2. -
    1. Chrome: seleccione "Historial de navegación" y "Caché ..."
    2. IE: dejo la opción predeterminada "Archivos temporales de Internet y archivos del sitio web", "Cookies y datos del sitio web", "Historial"
    3. FF: "Historial de navegación y descarga", "Caché"
  3. Haga clic en "Eliminar"
  4. Cierre y vuelva a abrir su navegador. Deberia de funcionar
Estiércol le
fuente
También debe asegurarse de no estar en la página en cuestión, porque algunos navegadores no borran los elementos almacenados en caché de las páginas abiertas.
Oliver Schimmer
6

Para fines de prueba (para evitar redireccionamientos en caché), las personas pueden abrir NUEVA VENTANA PRIVADA : haga clic en CTRL+SHIFT+N[si usa Mozilla, use P]

T.Todua
fuente
Esto se ha rebajado, probablemente porque la principal promesa de la "ventana privada" no es ESCRIBIR en las cachés, sino que aún puede LEER / REUTILIZARlas. PERO para mí en Firefox 37.0.1 (Linux) esto funcionó y fue muy rápido y útil. La ventana privada refleja la configuración actual / sin caché del servidor web, mientras que las pestañas normales del navegador utilizan una redirección 301 en caché.
alfonx
alfonx: la ventana privada no puede reutilizar la memoria caché simplemente porque el propietario del servidor podría usar los elementos en forma de cookie revelando la identidad previa del usuario. Aunque debo admitir que la reutilización de caché probablemente sea segura contra una esposa que odia la pornografía.
Zdenek
66
Esto no funciona si ya tiene un 301. en caché. De hecho, Private utilizará la redirección que está en caché.
jeffmcneill
1

Pruebe sus redireccionamientos utilizando el modo de incógnito / InPrivate para que cuando cierre el navegador vaciará ese caché y la reapertura de la ventana no contendrá el caché.

yougotiger
fuente
1

Como muestran las otras respuestas. El almacenamiento en caché puede ser indefinido en el navegador. Esto es extremadamente peligroso. Entonces no lo hagas. Al menos agrega encabezados de caché. En htaccess siempre lo hago de esta manera con el almacenamiento en caché:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
  # The E=nocache:1 sets the environment variable nocache to the value of one
  RewriteRule ^/?(.*) https://www.example.org/$1 [L,R=301,E=nocache:1]
</IfModule>


<IfModule mod_headers.c>
  ## Set the response header if the "nocache" environment variable is set
  ## in the RewriteRule above.
  Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache

  ## Set Expires too ...
  Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</IfModule>
Yunzen
fuente
1

Para resolver el problema de una dirección localhost cambié el número de puerto con el que se ejecutaba el sitio. Esto funcionó en la versión 73.0.3683.86 de Chrome.

combatc2
fuente
-1

En la última versión 79 de Google Chrome, puede usar chrome: // net-internals y seleccionar DNS en el panel izquierdo, luego toque el botón Borrar caché de host

Captura de pantalla de Chrome abriendo la página net-internals

Mohammad Ersan
fuente
No estoy seguro de por qué esto se rechaza, Http 301 es un problema relacionado con la caché del host DNS
Mohammad Ersan