2012-03-12 15 views
5

Spędziłem moje weekendowe programy trochę żartem April Fool, ale to nie działa tak, jak chcę jeszcze.April denerwująca pamięć podręczna przeglądarki odmawia przepłukiwania

Mam witrynę opartą na Drupal 6, na której chcę zmienić tak mało, jak to tylko możliwe. Chodzi o to, że wszystkie obrazy wyświetlane z katalogu/files są przekierowywane na zewnętrzny serwer WWW (myserver), który odwraca obraz do góry nogami, a następnie wyświetla go przeglądarce.

Aby internetową Drupal (targetserver) przekierować wszystkie żądania obrazów do innego serwera, założyłem .htaccess następująco:

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

I tak daleko, że działa świetnie! Kiedy włączam wszystko, sztuczka Prima April'a zmienia niektóre obrazy i są wyświetlane w przeglądarce klienta.

Ale kiedy wyłączyć .htaccess @targetserver, moja przeglądarka odmawia sobie sprawę, że tylko miał być tymczasowy żart i zapomnieć edytowanego zdjęcia :(

Powyżej znajduje się sniplet skryptu Perl na mójserwer/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; 

próbowałem następujących bez powodzenia:

  1. Dodaj dodatkowy nagłówek w skrypcie: print „Cache-Control: max-age = 36 \ r \ n ";
  2. Dodaj linię w .htaccess @targetserver: zestaw nagłówka Expires "Mon Mar 12 15:45:00 CET 2012"
  3. zmienić nazwę na image.jpg na różne sposoby TMP image.jpg, obrazu. jpg.tmp zmieniając RewriteRule w .htaccess @myserver

Ale po wyłączeniu .htaccess targetserver utrzymuje wysyłania 304 => „Not Modified” aż ręcznie opróżnić pamięć podręczną przeglądarki.

Moje pytanie brzmi: jak 1 kwietnia potrwać tylko jeden dzień, najlepiej do północy ... Jak mogę sprawić, aby przeglądarka zorientowała się, że musi przeładować oryginalny obraz, gdy żart się skończy?

+0

Nie "masz na myśli" Mon Mar 12 2012 15:45:00 CET'. zobacz http://blog.ellisons.org.uk/article-58 w celu omówienia domyślnych ustawień. Nie są one tym, czego można się spodziewać :-) – TerryE

+0

Wypróbowałem nagłówek Expire z poprawnym formatem czasu, ale też nie działa. – jippie

+0

Z drugiej strony, znalazłem o: cache? Device = disk w Firefox, które zasadniczo wyświetla wszystkie pliki w pamięci podręcznej i ich datę/czas ważności. To udowodniło, że nagłówek Cache-Control * działa *. Aby Firefox wygasł, wymagane jest użycie nowej/czystej karty. – jippie

Odpowiedz

0

Okazało się, że to problem z przeglądarką. Zamknięcie karty, ponowne otwarcie nowej opróżniło stare obrazy.

2

to jest śmieszne pytanie :-)

Wystarczy wyłączyć przekierowanie, gdy nie jest pierwszy kwietnia. 302 nie są buforowane przez przeglądarkę.

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] 

Będziesz musiał sprawdzić, czy wartości 1 i 3 są prawidłowe, aby dopasować kwietnia pierwszy, ale myślę TIME_MON 0-11 i 1-31 TIME_DAY jest

+0

Pomysł polegał na ręcznej zmianie pliku .htaccess, ale jest to świetny mały dodatek, dzięki któremu moje życie jest jeszcze łatwiejsze! Zostało mi kilka dni na eksperymentowanie z tym: o) Thnx! – jippie

+0

Utworzono mały skrypt perla i towarzyszące mu .htacces, aby sprawdzić TIME_MON, ale wydaje się, że nie masz racji co do miesiąca. Jest to wyjście Mam parę minut temu (Wed Mar 14 11:23:02 CET 2012): TIME: 20120314112302 TIME_DAY: 14 TIME_HOUR: 11 TIME_MIN: 23 TIME_MON: 03 TIME_SEC: 02 TIME_WDAY : 3 TIME_YEAR: 2012 – jippie

+0

OK, dziękuję za podzielenie się wynikami. Zmień "^ 3 $" na "^ 04 $" a "^ 1 $" na "^ 01 $" lub, ponieważ nie jestem pewien co do wiodącego zera, '^ 0? 1 $'. – Gerben

Powiązane problemy