JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

AJAX (y VII): Posibles problemas ( y IV) - Problemas y beneficios de las cachés

Para terminar voy a comentar algo sobre las cachés...

Cuando envías una petición AJAX (o no AJAX) al servidor es posible que si la caché del lado servidor no esté corrrectamente configurada el navegador realice su propia caché y por lo tanto la llamada no llegue al servidor jamás. Eso puede ser estupendo (muchas veces es lo que querremos para ahorrar procesamiento) y otras puede ser una maldición ya que no obtendremos los datos actualizados.

Otra cosa a tener en cuenta es que algunos proveedores utilizan en su red dispositivos proxy-caché que no están bajo nuestro control. Éstos no funcionan todo lo bien que debieran o al menos no respetan las configuraciones de servidor como es debido y hay veces que las peticiones se pierden en el Limbo de los justos.

A la hora de enviar datos por POST como hemos visto en el post anterior, no hay problema. El verdadero problema está en las peticiones GET, por otro lado las más habituales.

Si el servidor tiene bien configurada la caché (es decir, indica cuándo caducan los contenidos o marcamos en IIS que éstos caduquen inmediatamente) no deberíamos experimentar fallos, salvando lo comentado respecto a los proxy-caché de algunos proveedores.

Si queremos asegurarnos de que la petición va a llegar a su destino podemos hacer fundamentalmente dos cosas:

1.- Agregar una cabecera que indique que se debe obtener el contenido siempre que éste sea posterior a una fecha antigua, por ejemplo así:

http.setRequestHeader('If-Modified-Since', 'Wed, 1 Jan 2003 00:00:00 GMT');

2.- Añadir un número aleatorio (o cadena) a la URL de cada petición.

Suele funcionar muy bien el agregarle una marca temporal, es decir, añadir a continuación la fehca y hora actuales, de modo que cada una de las peticiones que se hagan va a ser diferente y por lo tanto los caché que existan por el medio tienen que repetir siempre la petición. Por ejemplo:

http.open("POST", "http://www.miserv.com/misdatos.aspx?pasacache=" + new Date().getTime(), true)

Se le añade un parámetro que lleva como valor la fecha y hora en formato numérico (es decir, un número muy largo y que varía varias veces cada milisegundo), por lo que es muy difícil que se den dos peticiones idénticas incluso a través de un proxy-caché. Además ese parámetro extra de nombre inventado que nosotros le añadimos no debería afectar en absoluto a la llamada puesto que no está siendo tenido en cuenta por la aplicación.

Esta segunda técnica es, para mi, la más recomendable, aunque tal vez sea un poco más tediosa de implementar.

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

Con esta séptima entrega acabo la mini-serie sobre AJAX "a pelo". Posteriormente me gustaría continuarla con técnicas AJAX que no incluyan el uso directo de XmlHttpRequest sinoque utilicen bibliotecas o técnicas específicas, centrándome especialmente en ASP.NET.

¡Sigue atento a este blog! :-)

José Manuel Alarcón
Banner

Comentarios (2) -

Mucho me temo que eso no funciona así.
Los elementos de controles de servidor de ASP.NET tienen que establecerse en el servidor.

Esto se puede solucionar mediante llamadas fuera de banda (que probablemente toque en breve en este blog), pero cuando esté disponible Atlas (la plataforma AJAX de Microsoft) todo será muchísimo más fácil.

Saludos

Jose.

Responder

Muchas gracias por estos "tips". Me fueron realmente útiles! Saludos cordiales.

Responder

Agregar comentario