Tôi đã dành cho chương trình cuối tuần của mình một trò đùa của April Fool, nhưng nó không hoạt động theo cách tôi muốn.Bộ nhớ cache trình duyệt gây phiền nhiễu của April fool từ chối tuôn ra
Tôi có trang web dựa trên Drupal 6 mà tôi muốn thay đổi ít nhất có thể. Ý tưởng là tất cả các hình ảnh được phục vụ từ thư mục/files được chuyển hướng đến một máy chủ web bên ngoài (myserver) để lật hình ảnh lộn ngược và sau đó đưa nó vào trình duyệt.
Để làm cho trang web Drupal (targetserver) chuyển hướng tất cả các yêu cầu về hình ảnh đến máy chủ khác, tôi thiết lập một .htaccess như sau:
RewriteEngine On
RewriteBase/
RewriteCond %{HTTP_USER_AGENT} !^aprilFool$
RewriteRule ^(.*)$ http://myserver/aprilFool/?url=http://targetserver/files/$1 [R=302,L]
Và cho đến nay nó hoạt động tuyệt vời! Khi tôi kích hoạt mọi thứ, thủ thuật của April Fool thay đổi một số hình ảnh và chúng được hiển thị trong trình duyệt của khách hàng.
Nhưng khi tôi vô hiệu hóa các @targetserver .htaccess, trình duyệt của tôi từ chối để nhận ra điều đó chỉ có nghĩa là trở thành một trò đùa tạm thời và quên đi những hình ảnh đã chỉnh sửa :(
Đây là một sniplet của kịch bản Perl trên 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;
tôi đã thử những điều sau đây nhưng không thành công:
- Thêm một tiêu đề phụ trong kịch bản: print "cache-Control: max-age = 36 \ r \ n ";
- Thêm một dòng trong @targetserver .htaccess: Tiêu đề bộ Expires "Mon 12 Tháng Ba 15:45:00 CET 2012"
- Thay đổi tên cho image.jpg theo những cách khác nhau tmp-image.jpg, hình ảnh. jpg.tmp bằng cách thay đổi RewriteRule trong .htaccess @myserver
Nhưng sau khi vô hiệu hóa .htaccess, máy chủ đích tiếp tục gửi 304 => 'Không được sửa đổi' cho đến khi tôi xóa bộ nhớ cache của trình duyệt theo cách thủ công. Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể làm cho ngày 01 tháng 4 cuối cùng chỉ một ngày, tốt nhất là cho đến nửa đêm ... Làm thế nào tôi có thể làm cho trình duyệt nhận ra nó phải tải lại hình ảnh ban đầu khi trò đùa kết thúc?
Dont 'bạn có nghĩa là' Mon Mar 12 2012 15:45:00 CET'. xem http://blog.ellisons.org.uk/article-58 để thảo luận về các giá trị mặc định. Họ không phải là những gì bạn có thể mong đợi :-) – TerryE
Đã thử tiêu đề hết hạn với định dạng thời gian chính xác, nhưng nó dường như không hoạt động. – jippie
Mặt khác, tôi tìm thấy về: cache? Device = disk trong Firefox, về cơ bản hiển thị tất cả các tệp trong bộ nhớ cache và ngày/giờ hết hạn của chúng. Điều này chứng minh rằng tiêu đề Cache-Control * là * làm việc. Để Firefox hết hạn hình ảnh, tôi bắt buộc phải sử dụng một tab mới/sạch. – jippie