Ver Mensaje Individual
  #14 (permalink)  
Antiguo 28/10/2008, 14:44
OeL
 
Fecha de Ingreso: octubre-2008
Mensajes: 3
Antigüedad: 16 años, 1 mes
Puntos: 0
Firefox SOLUCIONES - "doble-carga-pagina"

ATENCIÓN DESARROLLADORES WEB: FireFox puede ROMPER tu aplicación "del lado del servidor" (esto es nuevo). No es que el "cliente" no vea bien una página: es que el "programa en el servidor" empezará a funcionar raro, como si tuviera vida propia y ejecutara acciones por su cuenta.

Puede que algunos ya lo conozcáis (tema prefetching Firefox), aunque a mí me ha pasado hace poco ... y casi me vuelvo loco (y por lo que he visto así anda mucha gente) ... y es la cagada más enorme de la historia de los navegadores ... y es de Firefox (quién me lo iba a decir).

Empezamos:

Fíjate en este código php:

Código:
<?php
session_start();
echo $_SESSION['contador']++;
?>
¿Qué hace?
Cada vez que recargues la página verás un número, que será sucesivamente 1,2,3,4, etc

PERO en Firefox (y sólo en firefox) "a lo mejor" los números te salen así 1,3,5,7, ... contando de dos en dos.

Es como si cargara la página dos veces.

Al final descubres que Firefox (y sólo él) hace llamadas por su cuenta a otras páginas (o a la misma).

Carga la página que debe cargar y la muestra.
Pero además (a veces) hace una llamada a otra ... que no muestra ... pero la llamada queda hecha.

Y en una aplicación avanzada, que hace logs de acceso y tiene otros comportamientos, esto provoca el desastre (desde logs repetidos, a comportamientos erráticos -QUE TE VOLVERÁN LOCO-)

¿Cuándo hace eso Firefox?
Basta con que la página lleve esto:
Código HTML:
<link rel="next" href="...url..." /> 
(pon url la de la misma página)

Firefox hará una precarga de esa URL (o sea, una llamada al servidor)
Y CLARO en una aplicación web avanzada con punto de entrada centralizado ... provocará una reconstrucción de sessión, duplicación de logs y quién sabe que desastres (ya que se estarán ejecutando "acciones" que nadie ha pedido ... porque Firefox lo decide).

Tendrás en el "lado-servidor" un programa "ejecutando acciones" por su cuenta.

¿Por qué ocurre esto?
Por una "feature" de Firefox llamada "prefetching"

+++++++++++++++++++
VER INFO:
https://developer.mozilla.org/En/Link_prefetching_FAQ
+++++++++++++++++++

Algún listo pensó que Firefox podría "precargar" cosas para "ir más rápido" ... y han abierto la puerta de los infiernos, ya que hacer una llamada a una página en una aplicación web es sinónimo de ejecutar una acción (con lo cual comienzan a ejecutarse acciones sin que nadie las pida).

En tu navegador Firefox puedes desactivar el prefetching poniendo about:config, y cambiando network.prefetching-netx = false

Eso hará que Firefox vaya mejor (el colmo de los colmos encima).

PERO COMO WEBMASTER ¿CÓMO PROTEGERTE DE FIREFOX?

URGENTE:
¿CÓMO EVITAR ESTO COMO WEBMASTER?

Si tienes un punto de entrada a tu aplicación, pon esto al principio de todo (o ponlo en todas las páginas al principio)

Código:
<?php
if ( isset($_SERVER['HTTP_X_MOZ']) && $_SERVER['HTTP_X_MOZ'] == 'prefetch' ){
	ob_end_clean();
	header('HTTP/1.1 403 Prefetch Forbidden');
	die;
}
?>
¿Qué hace?
Detecta una cabecera enviada por firefox cuando hace prefetching, y evita que se ejecute nada en el servidor.

VIVIR PARA VER:
Ahora resulta que Firefox es el mayor KILLER potencial de las aplicaciones web avanzadas basadas en MVC (donde cada llamada es una "acción" en el sistema ... que puede interaccionar con DB, etc).

Saludos a todos ... y tomar buena nota.

Leo (www.netcentroseduca.net)