PDA

Ver la versión completa : Obligar a los browsers a no usar la cache



Devian
27-05-2021, 03:42 AM
Hola:
Quiero hacer un Archivo .html que obligue a los browser a NO USAR LA CACHE. Se trata de un simple INDEX.HTML de pocas líneas, pero que a veces lo tengo que cambiar y quiero estar seguro que todos acceden a él sin usar la cache.

Yo pensé que eso sería algo super-requete-simple, pero no encontré nada que me sirva que sea "BBB" (bueno, bonito y barato).

Aclaro que no soy experto programador ni nada por el estilo, se trata de varios archivos INDEX.HTML bien cortitos que quiero que sean accedidos siempre por todos los browsers, sin acceder a ninguna cache, sea la cache de los browsers que la maldita cache de los ISP.

Busqué por las internetes y hay decenas y decenas de páginas que te explican que pongas meta-tags en los encabezados HTML, del tipo "Expires" content="-1"

o si no "CACHE-CONTROL" content="NO-CACHE", y también "Pragma" content="no-cache"

Probé muchos de esos meta-tags .. pero no funkan.

Siempre hay algún maldito navegador que usa la cache incluso después de más de diez días después que yo cambié el código HMTL.

¿Alguien sabe como hacer un index.html que no use la cache?

(y que sirva para todo: Windows nuevos, windows de la época del ñaupa IE, Chrome, Firefox, etc, en iOS, en Android, y ainda mais

-------------------------------------------------------

Por lo que averigüé, todos esos META-TAGS que recomiendan son hyper-antiguos y obsoletos, no me sirven de nada, hice muchas pruebas.

Me parece algo tan básico que no puedo creer que no hayan inventado algo bien simple para anular la Cache.

Tal vez soy yo que no supe buscar en la internet la posible solución, pero la verdad que no encontré nada, aparte de esos consejos obsoletos de "NO-CACHE", "PRAGMA", etc etc.

-------------------------------------------------------

Luego de semanas de hacer pruebas y analizar los logs de la gente que visita esos archivos index.html y verificar que siempre había alguno que otro que usaba la cache, tuve que hacer lo que no quería, o sea hacer una "solución a la uruguaya" , una forma que no me gusta pero funciona:

Agarré el archivo .HTML y lo pasé a .PHP, usando la función ECHO, agregándole dos líneas al principio y dos líneas al final.
O sea que ahora el php se ejecuta y crea ese mismo código html, y de esa forma obligo a los usuarios a ejecutar dicho archivo php todas las veces.

El archivo era INDEX.HTML, que ahora se llama INDEX.PHP, pero la URL no cambió, y lo que obtiene el usuario es lo mesmo mesmito, y como yo me imaginaba ahora sí todos los browsers acceden directamente sin usar la cache.

Por obvias razones no me gusta para nada esa solución, a pesar de que funciona.

Master of the Wind
27-05-2021, 04:01 AM
La "solucion a la uruguaya" es agregar headers relativos al cache?

Si es eso, no es a la uruguaya. Los headers se procesan antes del HTML. Por lo tanto, la desicion de cachear o no la va a tomar antes de leer el primer caracter de HTML. Si lo tenes en el body con meta-tags, ya cargo el HTML. Y ya antes de eso el navegador tomo la decision de cachear.

Ademas, una pagina web tiene que tener contenido, y acciones interactivas. No configuraciones de ese tipo.


Sobre que funcione en todos los navegadores, ni Google ni Facebook desarrollan cosas que soportan todos los navegadores. No se porque la gente se cree que uno si puede.

Tags de html o xml, javascript, headers, y demas factores tienen sintaxis distinta o parametros distintos para cada version de cada navegador.

Devian
27-05-2021, 04:56 AM
La "solucion a la uruguaya" es agregar headers relativos al cache?


Los headers que probé no me funcionaron (los puse en "HEAD", antes del "BODY")

Probé de todo (hay muchos tutoriales que te indican de hacer eso, pero son tutoriales muy antiguos)

La solución "a la uruguaya" que no es de mi agrado pero FUNKA, es transformar el archivo index.html en index.php (usando el comando 'ECHO'), y de esa forma me funciona lo que yo quería, pero es algo que me parece "atado con alambre".

Rogmaniacs
27-05-2021, 10:02 AM
buenos dias php esta buenoo q tenes contra php vooooO!!!! te lo dice alguien q apenas hice un "hola mundo" peroo a futuro vo ya tener q aprender bastante massss!!!!... saludoss para q te corra php el server tiene q tener php es lo unico q agregas.... despues es un exitoo!!!

kapi2454
27-05-2021, 11:19 AM
No leí todo pero depende de lo que no quieras cachear.

Me pasó de que unos PDF o imágenes que se modifican seguidas me las cacheaba y el truco era el siguiente. Al final del archivo le agregaba un número que se genera aleatoriamente y ahí el navegador toma como que es diferente y lo vuelve a descargar .

Ej:
<img src="fotito.jpg?1222259157.415" alt="">

Esto funciona. Lo mismo con otros tipos de documentos o iframes etc.

Enviado desde mi MI A3 mediante Tapatalk

Master of the Wind
27-05-2021, 01:24 PM
Los headers que probé no me funcionaron (los puse en "HEAD", antes del "BODY")

Probé de todo (hay muchos tutoriales que te indican de hacer eso, pero son tutoriales muy antiguos)

La solución "a la uruguaya" que no es de mi agrado pero FUNKA, es transformar el archivo index.html en index.php (usando el comando 'ECHO'), y de esa forma me funciona lo que yo quería, pero es algo que me parece "atado con alambre".

Es que los headers no se agregan ni en el body ni el head.

Los headers son pares clave valor que el servidor manda antes de mandar el body. El html ES el body. Con php, como se ejecuta en el servidor para generar la respuesta, ahi si agrega los headers.

Shogui
27-05-2021, 01:37 PM
modo de incognito, levanta todo y se borra al cerrar el soft (no solo sirve para el nopor)

no idea si es lo que buscas pero...

Thalios
27-05-2021, 02:15 PM
Creo que quiere no tener que configurar los browsers en si, si fuera por eso simplemente configura que borre el cache para ese sitio al cerrar el browser y listo (como se hace para que el observador no joda con el registro)

Devian
27-05-2021, 02:37 PM
Creo que quiere no tener que configurar los browsers en si, si fuera por eso simplemente configura que borre el cache....


Exacto, Thalios, es así.
Yo tengo un index.html y quiero que toda la gente que lo visita acceda a él directamente (sin cache), porque ése index.html yo lo voy cambiando.
Pero no puedo decirle a la gente "apretá F5 para actualizar".

Devian
27-05-2021, 02:51 PM
...el truco era el siguiente. Al final del archivo le agregaba un número que se genera aleatoriamente

Si, ése truco está bueno, pero me imagino que sería en el caso que vos le entregás a la gente el link.

Si no te entendí mal, esos numeritos agregados los ponés en el link, no?
En mi caso el link de "index.html" es siempre el mismo, la URL queda siempre la misma, no la puedo cambiar.

Devian
27-05-2021, 02:52 PM
Es que los headers no se agregan ni en el body ni el head.


No entendí, entonces: ¿donde tengo que agregar esos headers?

Devian
27-05-2021, 02:53 PM
buenos dias php esta buenoo q tenes contra php vooooO!!!!

No tengo nada en contra del PHP, al contrario, me encanta, por eso lo usé.
El problema es que me rechina usar un ejecutable para producir un simple archivito index.html de pocas líneas, además de que en teoría es mucho más rapida la entrega del archivo html directamente por apache y no luego de la ejecución php.

Y además al ser código php tengo que estar atento a los caracteres con acento.
Ése problema lo tengo en dos hostings diferentes, y cada hosting tiene una configuración diferente acerca de los caracteres aceptados por el PHP:

En uno de los hostings me acepta elcódigo PHP con los caracteres UNICODE (con acentos, eÑe, etc) y en el otro hosting el mismo código PHP tengo que modificarlo para los carcateres UTF-8 porque si no no me salen las letras con acento.

En cambio si son archivos HTML normales y corrientes, en todos los hostings me los aceptan con caracteres con acento (unicode, normales y corrientes)

Master of the Wind
27-05-2021, 03:53 PM
Hace el index.php con el HTML, pero al principio ponele esto:






<?php


header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>



No se que te rechina. Los sistemas funcionan como funcionan, no como quiere uno que funcionen.


Por cierto, PHP no es un ejecutable, es un preprocesador de respuestas web. Vos lo que queres hacer es modificar la respuesta web para que el navegador tenga un comportamiento determinado. Tenes un poco mezclado los conceptos, HTML es puramente contenido, no tiene forma de alterar como van las respuestas al navegador, porque el html es solo el contenido de la respuesta, no los encabezados y demas factores que le llegan al navegador.


En teoria es mucho mas rapido devolver un HTML que un archivo que preprocese PHP, en la realidad esa diferencia no llega a ser ni de 1ms. Hace un archivo PHP con html, y un archivo html, y fijate la demora de la carga en el navegador. Ni el navegador se da cuenta. Ni un bot se da cuenta de esa diferencia.


Lo que decis de los acentos, en realidad es porque la forma correcta y estandar de HTML de poner un acento no es escribiendo el acento, sino usando una constante de HTML:


á -> &aacute;
é -> &eacute;
í -> &iacute;
ó -> &oacute;
ú -> &uacute;


Por ejemplo, "oración" lo tenes que escribir "oraci&oacute;"




Eso es estandar de HTML, independientemente de que uses PHP o no. Los caracteres internacionales se TIENEN que poner con esas constantes. Que te de paja, o digas "ahhh pero yo lo pongo asi nomas y funciona, hosting de mierda me caga con el encoding" no cambia el hecho de que si no lo haces como se debe, lo estas haciendo mal. Que por cierto, el encoding lo seteas al comienzo de un archivo PHP con header('Content-type: text/plain; charset=utf-8')

Master of the Wind
27-05-2021, 03:56 PM
La verdad, odio la gente que te dice "no tengo mucha experiencia/conocimeinto/practica" y despues te tira cosas como "tendria que ser mas facil"... o te porfia o refunfuña cuando se entera como tiene que hacer las cosas.

Devian
27-05-2021, 04:07 PM
La verdad, odio la gente que te dice ....

Dado que éste foro está en la sección "Software" .. "programas y sistemas", yo pensaba que éste es un foro para hablar de cosas técnicas.

Master of the Wind
27-05-2021, 04:09 PM
Tambien odio la gente que no sabe leer.

Por mi pregunta lo que quieras, siempre es mas que bienvenido y nadie dice o dijo lo contrario.


Pero no entiendo como si lo primero que decis es "Aclaro que no soy experto en programación" llegas a la conclusion de "soluciones a la uruguaya", o cosas que te rechinan...

10 grams de humildad estaria bueno.

Yo pense que buscabas una solucion que funcione, no una solucion que te parezca linda a vos.

Devian
27-05-2021, 04:14 PM
... PHP no es un ejecutable, es un preprocesador de respuestas web.


ES obvio que PHP no es ejecutable, pero ese no era el tema, .
De todas formas el PHP se ejecuta, o se interpreta, o llamalo como quieras, y tarda algo de tiempo en hacerlo, en cambio si escribís sólo el archivo HTML , el apache lo entregará más rápido, que un codigo en PHP para que produzca un archivo HTML.

Devian
27-05-2021, 04:21 PM
Yo pense que buscabas una solucion que funcione, no una solucion que te parezca linda a vos.


Olvidate lo lindo o lo feo; concentrate en lo técnico:
En mi primer post pregunté una simple pregunta: SI había algo que yo pueda poner en el archivo HTML para que los browsers no usen la cache.

Y en todos lados en internet te dicen de poner esos "headers", y te dicen que se pueden poner en el Archivo HTML (sin php), pero eso no me funcionó, y por eso tuve que usar el php.

Supongamos que tu respuesta fuese "la única forma es agregarle código "PHP"(o ASP, o el lenguaje que sea) , entonces en realidad tu respuesta a mi pregunta tendría que ser "No, no conozco ninguna solución que no sea la que VOS YA IMPLEMENTASTE, o sea usar PHP"

Master of the Wind
27-05-2021, 04:31 PM
Olvidate lo lindo o lo feo; concentrate en lo técnico:
En mi primer post pregunté una simple pregunta: SI había algo que yo pueda poner en el archivo HTML para que los browsers no usen la cache.

Y en todos lados en internet te dicen de poner esos "headers", y te dicen que se pueden poner en el Archivo HTML (sin php), pero eso no me funcionó, y por eso tuve que usar el php.

Supongamos que tu respuesta fuese "la única forma es agregarle código "PHP"(o ASP, o el lenguaje que sea) , entonces en realidad tu respuesta a mi pregunta tendría que ser "No, no conozco ninguna solución que no sea la que VOS YA IMPLEMENTASTE, o sea usar PHP"

Entonces la respuesta es no. Y te lo digo con propiedad. No es "no conozco", tengo mas de 10 años en el rubro como para decirte con propiedad un no solido.

Si te fijas en todos lados dicen que pongas esos headers, pero tambien que no funcionan. No todos los metatags estan enfocados a los navegadores. Depende del navegador la compatibilidad con el metatag, y estan mas enfocados a crawlers y spiders de los buscadores.




ES obvio que PHP no es ejecutable, pero ese no era el tema, .
De todas formas el PHP se ejecuta, o se interpreta, o llamalo como quieras, y tarda algo de tiempo en hacerlo, en cambio si escribís sólo el archivo HTML , el apache lo entregará más rápido, que un codigo en PHP para que produzca un archivo HTML.


De nuevo. No te vas a dar cuenta de ese "mas rapido". Capaz que hace 15 años si, con la potencia de hoy en dia no.



Olvidate lo lindo o lo feo; concentrate en lo técnico:
En mi primer post pregunté una simple pregunta: SI había algo que yo pueda poner en el archivo HTML para que los browsers no usen la cache.

Y en todos lados en internet te dicen de poner esos "headers", y te dicen que se pueden poner en el Archivo HTML (sin php), pero eso no me funcionó, y por eso tuve que usar el php

Bueno, si te dicen que pongas "headers" en HTML, ya andate de ese sitio porque te esta encajando cualquiera.

Los headers van antes del contenido de la respuesta. Es lo primero que recibe el navegador. Primero procesa los headers, y luego el contenido. El HTML es el contenido. Venga de PHP o de un archivo HTML. Entonces no hay chance de que puedas modificar lo que va antes del contenido, desde el contenido mismo.

Los headers siempre se modifican Server-side, con PHP, Java, Python o lo que sea. Y con esa modificacion salen del servidor al navegador. Si algo llego al navegador, ya llego, y ya recibio los headers.

BloodElf
27-05-2021, 04:41 PM
Creo que se esta confundiendo headers con lo que va en el HEAD de HTML, no?

Que son cosas bien distintas y como dice master, los headers se mandan desde el server al que hace la peticion, en este caso el browser, es decir que si llego al browser, no hay mucho que puedas hacerle a la respuesta.
Otra cosa son los headers que vos le mandas al server, y ahi le podes mandar lo que quieras. Pero son cosas distintas.

HTML HEAD: https://www.w3schools.com/html/html_head.asp

HTTP headers: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

kapi2454
27-05-2021, 08:41 PM
Si, ése truco está bueno, pero me imagino que sería en el caso que vos le entregás a la gente el link.

Si no te entendí mal, esos numeritos agregados los ponés en el link, no?
En mi caso el link de "index.html" es siempre el mismo, la URL queda siempre la misma, no la puedo cambiar.Y el index.html que tiene dentro ? Supongo muestra información y quieres que la información que muestra siempre la descargue y no la saqué del caché.

Si a esa información le agregas esos números al final. Las rutas son iguales pero el navegador piensa que cambió algo y la vuelve a descargar.

El Index sería el mismo pero la información de adentro la recarga. Es súper simple y funciona.

Enviado desde mi MI A3 mediante Tapatalk

kapi2454
27-05-2021, 08:49 PM
No me quedo muy claro eso del link. Si por ejemplo tienes una web www.hola.com , al escribirla en el navegador , este automáticamente busca un index.html o PHP (busca otras cosas también que se configuran en el servidor pero con que sepas esto por ahora alcanza ).

Si luego creas una carpeta dentro del hosting que sea mundo y dentro de esa carpeta creas tu index.html o PHP. Los navegadores lo buscan automáticamente. Y tú solo pasas este link www.hola.com/mundo , y si el Index que tienes dentro le agrega un número aleatorio al final de la información Que quieres mostrar, el navegador recarga siempre sin usar caché. Si te parece cambia algunos datos privados y pega el código de tu index aquí y lo miramos. Ahí vamos a darnos cuenta de que cosa quieres que no cachee y como ayudarte

Enviado desde mi MI A3 mediante Tapatalk

Master of the Wind
27-05-2021, 11:09 PM
Eso SI es solucion a la uruguaya.

Por cierto, para que eso funcione tenes que pasarle un parametro por GET. POr ejemplo www.hola.com/mundo?fecha=hoy. Si no le pasas ningun parametro y la URL es la misma, el navegador lo cachea, no le importa lo que haya adentro. Que por cierto, se que hay casos que firefox te lo cachea igual.

kapi2454
27-05-2021, 11:44 PM
Eso SI es solucion a la uruguaya.

Por cierto, para que eso funcione tenes que pasarle un parametro por GET. POr ejemplo www.hola.com/mundo?fecha=hoy. Si no le pasas ningun parametro y la URL es la misma, el navegador lo cachea, no le importa lo que haya adentro. Que por cierto, se que hay casos que firefox te lo cachea igual.Si tienes razón en eso y ahí está el motivo en qué también hago eso con las cosas de adentro. Por ejemplo no se <img src=fotico.img?3858473> , lo probé en los navegadores conocido y funciona.
Me pasó con unas guardias que por algún motivo desconocido de las mentes humanas solo las quieren ver y descargar en un PDF que editan y suben varias veces al día y con este truco va como piña.
(Lo había hecho con una base de datos pero no sé por qué igual querían un PDF).

Enviado desde mi MI A3 mediante Tapatalk

Rogmaniacs
28-05-2021, 09:06 AM
Buenos dias me gusto la solucion a la uruguaya de random al final!!! jajajaj el q pregunto debe estar con una morsaa apretandose el cerebro en este momentoo jujujuu felicitaciones a los bochoss q la inventaron saludosss

kapi2454
28-05-2021, 12:17 PM
Buenos dias me gusto la solucion a la uruguaya de random al final!!! jajajaj el q pregunto debe estar con una morsaa apretandose el cerebro en este momentoo jujujuu felicitaciones a los bochoss q la inventaron saludosssSi yo en realidad la copié de un foro. No fue idea mía pero me funcionó. Medio con alambre pero es algo difícil con otros métodos que funcione en todos los navegadores.

Enviado desde mi MI A3 mediante Tapatalk