Надоедливый браузерный кеш первого апреля отказывается сбрасывать - PullRequest
5 голосов
/ 12 марта 2012

Я провел свои выходные, программируя небольшую апрельскую шутку, но пока она не работает так, как я хочу.

У меня есть веб-сайт на Drupal 6, который я хочу изменитькак можно меньше.Идея состоит в том, что все изображения, которые обслуживаются из каталога / files, перенаправляются на внешний веб-сервер (myserver), который переворачивает изображение вверх дном и затем передает его в браузер.

Создание веб-сайта Drupal (targetserver)) перенаправив все запросы на изображения на другой сервер, я настроил .htaccess следующим образом:

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

И пока он отлично работает!Когда я включаю все, хитрость Апрельского Дурака меняет некоторые изображения, и они отображаются в браузере клиента.

Но когда я отключаю .htaccess @targetserver, мой браузер отказывается понимать, что он предназначен только длявременная шутка и забудь отредактированные изображения: (

Вот фрагмент скрипта Perl на myserver / 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;

Я безуспешно пробовал следующее:

  1. Добавить дополнительный заголовок в скрипт: print "Cache-Control: max-age = 36 \ r \ n";
  2. Добавить строку в .htaccess @targetserver: заголовок установлен Expires "Пн Мар 12 15:45:00 CET 2012 "
  3. Изменить имя для image.jpg различными способами tmp-image.jpg, image.jpg.tmp, изменив RewriteRule в .htaccess @ myserver

Но после отключения .htaccess целевой сервер продолжает отправлять 304 => «Не изменено» до тех пор, пока я не вручную очищу кеш браузера.

Итак, мой вопрос: как я могу сделать 1 апреля последним толькоодин день, желательно до мидниGHT ... Как я могу заставить браузер понять, что он должен перезагрузить исходное изображение, когда шутка закончилась?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Это забавный вопрос: -)

Просто отключите перенаправление, когда оно не началось в апреле.302 не кэшируются браузером.

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]

Вы должны будете проверить, правильны ли значения 1 и 3, чтобы соответствовать первому апреля, но я думаю, что TIME_MON 0-11, а TIME_DAY 1-31

0 голосов
/ 10 апреля 2012

Оказалось, проблема с браузером.Закрытие вкладки, повторное открытие нового сбрасывает старые изображения.

...