elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ... 74
101  Programación / Desarrollo Web / Re: [Pregunta]: ¿Cómo agregar una nueva versión siendo esta ya visible para todos? en: 28 Noviembre 2020, 14:24 pm
Ahh pensé que así era para el servidor, como se haría entonces a dónde debería ir?

Gracias.
102  Programación / Desarrollo Web / Re: [Pregunta]: ¿Cómo agregar una nueva versión siendo esta ya visible para todos? en: 28 Noviembre 2020, 04:40 am
Código
  1. $file = 'my_file.php';
  2. $last_modified = filemtime($file);
  3. $etag = md5_file($file);
  4.  
  5. header('age: 0');
  6. header('cache-control: public, max-age=0, must-revalidate');
  7. header('content-encoding: gzip');
  8. header('content-type: text/html; charset=UTF-8');
  9. header('last-modified: '.gmdate('D, d M Y H:i:s', $last_modified).' GMT');
  10. header('etag: '.($etag));
  11.  

Creo que ya sería todo...
En resumen, ¿de está manera ya no tendría ese problema? (no sé si esta vez lo apliqué bien)
103  Programación / Desarrollo Web / Re: [Pregunta]: ¿Cómo agregar una nueva versión siendo esta ya visible para todos? en: 27 Noviembre 2020, 20:56 pm
Las configuraciones del servidor (uso PHP como lenguaje del servidor) las hago de forma dinámica con ini_set pero cual manera debería usar para estas configuraciones de la caché?

Código
  1. header('age: 0');
  2. header('cache-control: public, max-age=0, must-revalidate');
  3. header('content-encoding: gzip');
  4. header('etag: (esa clave larga)');
  5. // o quizás deba usar?
  6. ini_set('age', 0);
  7. ini_set('cache-control', 'public, max-age=0, must-revalidate');
  8. ini_set('content-encoding', 'gzip');
  9. ini_set('etag', '(esa clave larga)');
  10.  

Después está date, pero no estoy seguro si eso haga algo...
104  Programación / Desarrollo Web / Re: [Pregunta]: ¿Cómo agregar una nueva versión siendo esta ya visible para todos? en: 27 Noviembre 2020, 04:58 am
No entiendo tu pregunta.

src es un atributo.
<script>, <img> son etiquetas.
script, img son elementos (en concreto elementos html).
/x.jpg es una url relativa.
https://example.com/x.jpg es una url absoluta.
En src="/x.jpg", /x.jpg es el valor del atributo src.
v0.0.1 es un query string(cadena de consulta en español, aunque nunca vi utilizar este término en español)
? es un separador para indicar el comienzo del query string en el protocolo http
El query string está compuesto de key/value pairs (en español parejas de claves (identificadores) y valores. Normalmente se utiliza tipo /x.jpg?ancho=400

Te explico como funciona añadir la version o cualquier otra cosa en la url:
Cuando tu introduces un src="example.com/miFoto.jpg" en tu código html, estás definiendo donde se encuentra el recurso.
En la fase de parseo del navegador(cuando cargas la página el navegador lee el texto (codigo html) y lo interpreta para generar la página a partir de él. Al encontrar un <img src="/miFoto.jpg"> añadirá el base url para transformar el valor del atributo src de una ruta/url relativa a una absoluta.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
Por defecto la ruta se obtiene del método href del objeto location. (location.href)
Una vez convertido quedará <img src="https://example.com/miFoto.jpg">

En el siguiente paso que realiza el navegador se obtiene el recurso(miFoto.jpg en este caso) realizando una petición HTTP con el método GET.
La petición que hace el navegador podría ser:
Código
  1. GET /miFoto.jpg HTTP/1.1
  2. Host: example.com
  3. Accept: */*

Entonces el servidor web de example.com recive esta petición y la procesa/parsea para comprenderla y responder en consecuencia.
El servidor web pongamos de ejemplo Apache comprueba el archivo .htaccess (si existe) en la carpeta de la web, donde puede haber unas directivas tal que:
Código
  1. <filesMatch ".(ico|jpg|jpeg|png|gif)$">
  2. Header set Cache-Control "max-age=2592000, public"
  3. </filesMatch>
Aquí se indica que se incluya una cabecera HTTP(header) en la respuesta HTTP que se le dará al navegador en caso de que el recurso solicitado exista y su nombre cumpla con lo indicado en la expresión regular. En este caso se cumplirá para una serie de archivos cuyo nombre acabe por alguna de las extensiones de la expresión.
Entonces se incluye Cache-Control: max-age=2592000, public como cabecera de respuesta.
El navegador recive la imagen en el cuerpo de la petición junto al caché control y en base a el hashea la url del recurso y lo almacena en el caché.

Cuando se vuelve a solicitar la misma imagen, el navegador comprueba si la url que se está solicitando coincide con la que está almacenada en caché. Cuando le añades el ?v0.0.1 la url no coincide, por lo que el navegador entiende que la imagen que tiene en caché no coincide con la que se está solicitando actualmente y entiende como que es una imagen distinta. Se solicita la nueva imagen y se repite todo el proceso.

El efecto de añadir ?v0.0.1 es casi el mismo que si le cambias el nombre a la imagen cada vez que la actualices.
miFoto_v0.0.1.jpg.


PD: De todas formas esto de añadir la versión es un apaño rápido. Una solución para salir del paso de forma rápida y sencilla. Está bien para algún recurso concreto o páginas muy pequeñas y con pocas actualizaciones.

Qué pasa si mañana decides hacer una remodelación de la web? Tendrás que ir url por url y archivo por archivo cambiando las versiones. Si cambias todo de forma global puede que cambies la versión de algún archivo que no ha cambiado y obligas al cliente a descargarlo de nuevo a pesar de tener copia actual en caché.

La solución correcta/recomendada/óptima, es configurar el caché según tus necesidades. Normalmente en el servidor. Como puedes ver en uno de los ejemplos, se pueden usar expresiones regulares para cambiar el caché en archivos concretos. Para el problema que tienes, que creo que es algo más de fase de desarrollo que de producción, te recomiendo configurar el caché de tu servidor como en el ejemplo que te comenté anteriormente (en otra respuesta) de Netlify. Usando el etag para que el navegador compruebe automáticamente si el archivo cambió o no (utilizando e-tag). A parte de que es una solución más robusta, también es más cómoda para ti, ya que no tienes que andar cambiando las url para nada.

Estuve leyendo eso de netlify y quedé medio perdido, en pocas palabras esto:



es equivalente a poner esto en mi html?

Código
  1. <meta age="0">
  2. <meta cache-control="public, max-age=0, must-revalidate">
  3. <meta content-encoding="gzip">
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5.  

 :huh: :huh:  :huh:
105  Programación / Desarrollo Web / Re: Lógica "Cambiar contraseña" en: 25 Noviembre 2020, 04:33 am
Sí, ya tengo un sistema que me protege de ataques CSRF. Lo que sí no creo que haga eso lo del mail, por ahí a modo de aviso no tanto de seguridad quizás si mandara un mail diciéndole que cambió la contraseña correctamente y eso... (como dije es a nivel de aviso, no de seguridad)...

Gracias por todas las ayudas y sugerencias.
106  Programación / Desarrollo Web / Re: [Pregunta]: ¿Cómo agregar una nueva versión siendo esta ya visible para todos? en: 25 Noviembre 2020, 04:28 am
Sí ya sabía lo que era la memoria caché (por lo menos en líneas generales), gracias a las respuestas de todos y algunas cosas que pregunté por separado haría esto...

Como ya dijeron, tendría que...
Código
  1. <script src="[...]/x.js?v0.0.1></script>
  2.  

mi duda igualmente viene siendo ¿Qué es lo que hago con las imágenes?, creo que las imágenes también son guardadas en la memoria caché ¿no es así?
¿debería...?

Código
  1. <img src="[...]/x.jpg?v0.0.1>
  2.  

¿Qué otra etiqueta o nose como se dirá... ¿src=""? debería aplicarle esto de concatenar un dato? (en este caso la versión)

Gracias.
107  Programación / Desarrollo Web / Re: Lógica "Cambiar contraseña" en: 24 Noviembre 2020, 03:34 am
Así a bote pronto se me ocurre que hay -al menos- un paso previo.

Paso 0. ---> ¿El usuario tiene permisos/credenciales para cambiar la contraseña? Si es que SI ---> IR a paso 1. Si es que NO ---> se le echa fuera.

Un usuario -en general- no tiene porqué tener permisos para cambiar su propia contraseña. A veces es el administrador quien se la da, e incluso se la cambia cada cierto tiempo. Si; sé que es un poco tiquismiquis para redes/sistemas más o menos personales/domésticos, pero en entornos empresariales/corporativos es bastante normal que el usuario/operador de un terminal-PC no tenga privilegios de administrador para cambiar su propia contraseña (o instalar programas o compartir archivos, etc).

EDITO: también se me ocurre que el paso 3 suele implementarse antes del 1. De hecho suele ser el paso 3 concomitante con el que yo he llamado paso 0. Por ejemplo Linux para cambiar con sudo passwd ----- la contraseña de un usuario primero te pide tu propia contraseña sudo con la cual verifica si estás autorizado a cambiar la contraseña del otro (que puedes ser tú mismo), y posteriormente es cuando te pide la nuevas contraseña del usuario que sea (el que has llamado paso 1) y después verificarla (paso 2 tuyo).

Hola!

me estaba refiriendo a cambiar una contraseña en una -aplicación web-, igual no aclaré eso en el título del tema.
108  Programación / Desarrollo Web / Re: [Pregunta]: ¿Cómo agregar una nueva versión siendo esta ya visible para todos? en: 24 Noviembre 2020, 03:31 am
Está todo como medio engorroso, hay como muchas de maneras de hacerlo y es por eso que me generan muchas dudas que al final no se que tenga que usar y que no (dependiendo que sea lo más optimo)...

¿Cómo hacen ustedes con sus aplicaciones web (si es que están en eso)?
109  Programación / Desarrollo Web / Re: Lógica "Cambiar contraseña" en: 23 Noviembre 2020, 19:55 pm
Exacto, sería lo más simple, y yo no sé más que tu sobre desarrollo web ni nada... Pero podrías colocar una especie de "pregunta secreta". No se sí se adapta a tus gustos..

Gracias!
110  Programación / Desarrollo Web / [Pregunta]: ¿Cómo agregar una nueva versión siendo esta ya visible para todos? en: 19 Noviembre 2020, 20:20 pm
Hola!

Varias veces me pasó que cuando modifico una parte de mi código de javascript o algún estilo, para que sea aplicado en la aplicación web es necesario borrar la cache con el tradicional (CTRL+F5) para que se vean los cambios. Mi pregunta viene siendo, entonces como le hago para que cuando yo agregue una nueva versión, imaginemos que mi aplicación web esta en fase de producción (ya la están usando las personas) entonces yo al modificar un script para que estas personas puedan ver los cambios van a tener que borrar la cache, pero no todo el mundo sabe lo de CTRL+F5 y nunca vi a una aplicación notificar que como hay una nueva versión hay que tocar CTRL+F5 para que se vean los cambios entonces como hacen para poder implementar la versión/cambios y ya estén a la vista sin tener que reiniciar la caché?
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ... 74
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines