2012-03-12 24 views
5

floş yapmayı reddetti Haftasonu programlamayı biraz April Fool'un şakasını geçirdim, ama henüz istediğim şekilde çalışmıyor.Nisan aptalın sinir bozucu tarayıcı önbelleği

Drupal 6 tabanlı bir web sitem var ve mümkün olduğunca az değişiklik yapmak istiyorum. Buradaki fikir,/files dizininden sunulan tüm görüntülerin, görüntüyü ters çeviren ve sonra tarayıcıya sunan harici bir web sunucusuna (myserver) yönlendirilmesidir.

Drupal web sitesini (HedefSunucu) diğer sunucuya görüntüler için tüm istekleri yeniden yönlendirmek yapmak için, aşağıdaki gibi bir .htaccess kurmak:

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

Ve şimdiye kadar o inşaat büyük! Her şeyi etkinleştirdiğimde, April Fool'un hilesi bazı görüntüleri değiştirir ve müşterinin tarayıcısında görüntülenir. Ben .htaccess @targetserver devre dışı bıraktığınızda

Ama benim tarayıcı sadece Düzenlenen görüntüleri :(İşte

myserver üzerinde Perl script bir sniplet olan/geçici şaka olmalı ve unutmak gerekiyordu gerçekleştirmek reddediyor aprilFool: komut ekstra bir başlık ekle

  1. : print "Cache-Control: denedim

    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; 
    

    başarılı olamadı aşağıdaki max-age = 36 \ r \ n "

  2. .htaccess @targetserver bir satır ekleyin: Başlık seti tmp-image.jpg çeşitli şekillerde, görüntüde image.jpg için "Mon 12 Mart 15:45:00 CET 2012"
  3. değiştirin adını sona eriyor. el tarayıcı önbelleği temizlemek kadar

@myserver .htaccess RewriteRule değiştirerek Ama HedefSunucu 304 gönderme tutar .htacces devre dışı bıraktıktan sonra jpg.tmp => 'Değiştirilmedi'.

Bu yüzden sorum şu: 1 Nisan'ı sadece bir gün, tercihen gece yarısına kadar nasıl yapabilirim ... Tarayıcıyı, şaka bittiğinde orijinal görüntüyü yeniden yüklemesi gerektiğini nasıl anlayabilirim?

+0

Bunu yapmak istemiyorsunuz 'Mon Mar 12 2012 15:45:00 CET'. Varsayılanlar hakkında bir tartışma için http://blog.ellisons.org.uk/article-58 adresine bakın. Beklediğiniz gibi değiller :-) – TerryE

+0

Expire üstbilgisini doğru zaman biçimi ile denediniz, ancak bu da işe yaramıyor. – jippie

+0

Diğer yandan, önbellekte bulunan tüm dosyaları ve son kullanma tarihlerini/saatlerini temel olarak görüntüleyen Firefox'taki önbellek? Bu, Cache-Control üstbilgisinin * çalıştığını kanıtladı. Firefox'un görüntüyü sona erdirmesi için yeni/temiz bir sekme kullanmam gerekir. – jippie

cevap

0

Bu bir olduğu ortaya çıktı olduğu tarayıcı sorunu. Sekmeyi kapatmak, yeni bir görüntüyü yeniden açmak eski görüntüleri temizledi.

2

Bu ilk Nisan olmadığında sadece yönlendirme devre dışı

:-) komik bir sorudur. 302'ler tarayıcı tarafından önbelleğe alınmamıştır.

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] 

Sen değerleri 1 ve 3 birinci nisan maç için doğru olup olmadığını kontrol etmek gerekir, ama ben TIME_MON 0-11 olduğunu düşünüyorum ve TIME_DAY 1-31

+0

Fikir, .htaccess dosyasını manuel olarak değiştirmekti, ancak bu hayatımı daha da kolaylaştıran parlak küçük bir eklenti! Bununla deney yapmak için birkaç günüm var: o) Thnx! – jippie

+0

TIME_MON'u kontrol etmek için küçük bir perl komut dosyası ve beraberindeki .htacces oluşturuldu, ancak ay boyunca yanılıyorsunuz. Bu benim birkaç dakika önce var çıkışı (Çar 14 Mart 11:23:02 CET 2012): ZAMAN: 20120314112302 TIME_DAY: 14 TIME_HOUR: 11 TIME_MIN: 23 TIME_MON: 03 TIME_SEC: 02 TIME_WDAY : 3 TIME_YEAR: 2012 – jippie

+0

Tamam, sonuçlarınızı paylaştığınız için teşekkür ederiz. Yani '^ 3 $' ''^04 $ 've'^1 $ 'ı'^01 $ 'olarak değiştirebilirim, ya da baştaki sıfırdan emin olmadığım için'^0? 1 $ '. – Gerben

İlgili konular