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:
- Dodaj dodatkowy nagłówek w skrypcie: print „Cache-Control: max-age = 36 \ r \ n ";
- Dodaj linię w .htaccess @targetserver: zestaw nagłówka Expires "Mon Mar 12 15:45:00 CET 2012"
- 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?
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
Wypróbowałem nagłówek Expire z poprawnym formatem czasu, ale też nie działa. – jippie
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