2012-03-12 2 views
5

私は週末のプログラミングにApril Foolのジョークを少し費やしてきたが、私はまだそれが欲しい方法ではうまくいかない。4月の厄介なブラウザのキャッシュがフラッシュするのを拒否する

私はできるだけ変更したくないDrupal 6ベースのWebサイトを持っています。アイデアは、/ filesディレクトリから提供されるすべてのイメージが、イメージを逆さまにしてブラウザに提供する外部Webサーバー(myserver)にリダイレクトされることです。

は、Drupalのウェブサイト(targetserver)他のサーバへの画像のすべての要求をリダイレクトを行うには、次のように私は.htaccessファイルを設定します。

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

を、これまでそれは素晴らしい作品!私がすべてを有効にすると、April Foolのトリッキーが画像の一部を変更し、クライアントのブラウザに表示されます。

しかし、私は.htaccessの@targetserverを無効にすると、私のブラウザはここ

は/ myserverの上でPerlスクリプトのsnipletある:(それは一時的な冗談であることを意味した実現し、編集した画像を忘れることを拒否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. は、スクリプト内の余分なヘッダを追加します。印刷「のCache-Control: MAX-年齢= 36 \ rを\ n "である。
  2. は.htaccessを@targetserverに行を追加します:ヘッダセットはTMP-image.jpgさまざまな方法、 画像でimage.jpgのために、 "月3月12日午後03時45分00秒CET 2012"
  3. 変更に名前を期限切れにします。

@myserverしかしtargetserverが、私は手動でブラウザのキャッシュをフラッシュするまで、304 =>「変更されていない」を送信し続けるの.htaccessを無効にした後に.htaccessでのRewriteRuleを変更することによってjpg.tmp。

私の質問は、4月1日を最後の1日だけ、できれば真夜中にするにはどうすればよいのですか...ジョークが終了したら元のイメージをリロードする必要があることをブラウザに認識させるにはどうすればいいですか?

+0

「あなたは意味していない」2012年3月12日15:45:00 CET'。デフォルトについての説明はhttp://blog.ellisons.org.uk/article-58を参照してください。 – TerryE

+0

Expireヘッダーを正しい時刻形式で試してみましたが、どちらも機能していないようです。 – jippie

+0

一方、私はFirefoxについて、cache:device = diskを見つけました。これは基本的にすべてのファイルをキャッシュに表示し、その有効期限/時間を表示します。これは、Cache-Controlヘッダー*が機能していることを証明しました。 Firefoxが画像の有効期限を切るには、新しい/きれいなタブを使用する必要があります。 – jippie

答えて

0

だと思いますブラウザの問題。タブを閉じて、新しい画像を再度開き、古い画像をフラッシュしました。

2

これは、最初の4月でないときだけリダイレクトを無効に

:-)面白い質問です。 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は、最初の4月に合わせて正しいかどうかを確認する必要がありますが、私はそれがあることが判明TIME_MONは0-11であるとTIME_DAYは1-31

+0

.htaccessファイルを手動で変更するというアイデアがありましたが、これは私の人生をさらに楽にしてくれる素晴らしいものです!私はこれを実験するために数日間残しました:o)Thnx! – jippie

+0

小さなperlスクリプトを作成し、.htaccesを付けてTIME_MONをチェックしますが、月が間違っているようです。これは私が数分前になった出力である(水3月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

結果を共有していただきありがとうございます。だから '^ 3 $'を '^ 04 $'と '^ 1 $'に変えて '^ 01 $'とするか、先頭のゼロの '^ 0?1 $'についてわからないからです。 – Gerben

関連する問題