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.com
a 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.com
mientras tanto habrá almacenado en caché la redirección incorrecta example3.com
y, por lo tanto, no podrá comunicarse con ellos example1.com
ni example2.com
hasta que se borre su caché. Después de la investigación, encuentro que no había Cache-Control
y Expires
cabeceras 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?
Respuestas:
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:cache
y 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=3600
oExpires: Thu, 01 Dec 2014 16:00:00 GMT
a sus redireccionamientos 301. Incluso podría agregarCache-Control: no-cache
para que el navegadorCache-Control: no-store
no 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.
fuente
http://www.SOMEHOST.com
ahttps://www.SOMEHOST.com
. Pero ahorahttp://www.SOMEHOST.com
debe ser el host principal para el sitio. Entonces, redirige desde https a http eliminado. Como muestra, hice la redirección 301 dehttps://www.SOMEHOST.com
ahttp://www.SOMEHOST.com
, pero veo el bucle. El navegador no volvió a buscar ...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é.
fuente
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é:
F12
)F5
)Cuando todo esté bien, puede desmarcar "Desactivar caché" y todo continuará funcionando como se esperaba.
fuente
localhost:8000
delocalhost
(puerto 80). También borré todo el sitio / datos de la aplicación de localhost y localhost: 8000, pero tampoco ayudó.Haga que el usuario envíe un formulario de publicación en esa URL y la redirección en caché desaparecerá :)
fuente
301
es 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-Control
yExpires
hacer lo mismo. Alternativamente, si no desea almacenar en caché la301
respuesta, use los siguientes encabezados.fuente
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é.
fuente
¡¡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á.
fuente
Publicaré una respuesta que me ayudó:
ir a la url:
debería invocar popup y luego ...
cached images and files
.from beginning
fuente
como respuesta de @thomasrutter
De hecho, esto significa:
a.com 301 a b.com
eliminar el 301 de a.com
agregue b.com 301 a a.com
Entonces funciona.
fuente
a.com
301 -> b.com) (eliminara.com
301) (agregara.com/abcdefg
301 ->a.com
) y obligar al cliente a ver dea.com/abcdefg
alguna maneraTengo una solución simple que funcionó en todos los principales navegadores (última versión), incluye IE, Chrome y FF
fuente
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, useP
]fuente
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é.
fuente
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é:
fuente
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.
fuente
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
fuente