2012-03-12 8 views
5

He pasado mi fin de semana programando una pequeña broma de April Fool, pero todavía no funciona como quiero.Caché molesto del navegador de April Fool se niega a vaciar

Tengo un sitio web basado en Drupal 6 en el que quiero cambiar lo menos posible. La idea es que todas las imágenes que se sirven desde el directorio/files se redirijan a un servidor web externo (myserver) que voltea la imagen boca abajo y luego la muestra en el navegador.

que el sitio web de Drupal (servidor_destino) redirigir todas las peticiones de imágenes a otro servidor, He creado un .htaccess de la siguiente manera:

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_USER_AGENT} !^aprilFool$ 
RewriteRule ^(.*)$  http://myserver/aprilFool/?url=http://targetserver/files/$1 [R=302,L] 

Y hasta ahora funciona muy bien! Cuando habilito todo, el truco de April Fool cambia algunas de las imágenes y se muestran en el navegador del cliente.

Pero cuando desactivo la @targetserver .htaccess, el navegador niega a darse cuenta de que sólo estaba destinado a ser una broma temporal y olvidar las imágenes editadas :(

que aquí hay una sniplet del script Perl en miservidor/aprilfool:

my $ua = LWP::UserAgent->new; 
# Identify ourselves through the useragent, to prevent endless redirect loops 
$ua->agent('aprilFool'); 

# Load remote file 
my $response = $ua->get($url); 
if ($response->is_error) { die "Cannot retrieve document $url\n"; } 
my $imageData = $response->content; 


# Determine the file's mime type, need that to determine if we want to change it or not 
my $ft = File::Type->new(); 
my $format = $ft->mime_type($imageData); 

# If the file is an image, flip it 
if ($format =~ m/^image\//) { 
     my $image=Image::Magick->new; 
     $image->BlobToImage($imageData); 
     $image->Flip(); 
     $imageData = $image->ImageToBlob(); 
} 

# Send HTTP headers 
print "Content-type:$format\r\n"; 
print "\r\n"; 
print $imageData; 

he intentado lo siguiente sin éxito:

  1. Añadir una cabecera adicional en el guión: print "Cache-control: max-age = 36 \ r \ norte";
  2. añadir una línea en @targetserver .htaccess: Conjunto de la cabecera Expira "Dom Sep 12 15:45:00 CET 2012"
  3. Cambiar el nombre para imagen.jpg de varias maneras TMP-imagen.jpg, imagen. jpg.tmp cambiando el RewriteRule en .htaccess @myserver

Pero después de desactivar el .htaccess la servidor_destino sigue enviando 304 => 'sin modificar' hasta que me sonrojo manualmente la caché del navegador.

Así que mi pregunta es: ¿cómo puedo hacer que el 1 de abril dure solo un día, preferiblemente hasta la medianoche ... ¿Cómo puedo hacer que el navegador se dé cuenta de que tiene que volver a cargar la imagen original una vez que la broma terminó?

+0

No te refieres 'Lun Mar 12 2012 15:45:00 CET'. ver http://blog.ellisons.org.uk/article-58 para una discusión de los valores predeterminados. No son lo que cabría esperar :-) – TerryE

+0

Intentó el encabezado Expira con el formato de hora correcto, pero parece que tampoco funciona. – jippie

+0

Por otro lado, encontré acerca de: cache? Device = disk en Firefox, que básicamente muestra todos los archivos en caché y su fecha/hora de caducidad. Esto demostró que el encabezado * de Cache-Control está funcionando. Para que Firefox expire la imagen, se requiere que use una pestaña nueva/limpia. – jippie

Respuesta

0

Resultó ser una problema con el navegador Cerrando la pestaña, reabriendo una nueva enjuagó las imágenes antiguas.

2

Ésta es una pregunta divertida :-)

Sólo desactivar la redirección cuando no es uno de abril. 302 no están en la memoria caché del navegador.

RewriteCond %{TIME_DAY} ^1$ 
RewriteCond %{TIME_MON} ^3$ 
RewriteCond %{HTTP_USER_AGENT} !^aprilFool$ 
RewriteRule ^(.*)$  http://myserver/aprilFool/?url=http://targetserver/files/$1 [R=302,L] 

Usted tendrá que comprobar si los valores de 1 y 3 son correctas para coincidir con el primero de abril, pero creo que es TIME_MON 0-11 y 1-31 TIME_DAY es

+0

La idea era cambiar manualmente el archivo .htaccess, pero esta es una pequeña adición brillante que hace que mi vida sea aún más fácil. Me quedan unos días para experimentar con esto: o) ¡Thnx! – jippie

+0

Creó una pequeña secuencia de comandos de perl y .htacces de acompañamiento para comprobar TIME_MON, pero parece que está equivocado sobre el mes. Esta es la salida llegué hace par de minutos (Mar Ene 14 11:23:02 CET 2012): TIEMPO: 20120314112302 TIME_DAY: 14 TIME_HOUR: 11 TIME_MIN: 23 TIME_MON: 03 TIME_SEC: 02 TIME_WDAY : 3 TIME_YEAR: 2012 – jippie

+0

Bien, gracias por compartir sus resultados. Así que cambie '^ 3 $' a '^ 04 $' y '^ 1 $' a '^ 01 $ 'o, como no estoy seguro del cero inicial,'^0? 1 $ '. – Gerben

Cuestiones relacionadas