Perl CGI スクリプトで生成された非常に大きな HTML ページの問題を見つけようとしています。
私の CGI スクリプトは、生成された Web ページのサイズが 1 MB を超えない限り機能します。
しかし、Web ページのサイズが 1 MB を超えるとすぐに、ページはブラウザで正しく表示されますが、リロード後、ページは 1 MB で切り取られます。効果はしばらくの間 (>5 分?) 残り、1 回のリロードで消えます。
問題の考えられる原因をいくつか特定したと思います。
- perl の印刷に関する問題
STDOUT
- Apache の制限/バグ
- Apache の設定の問題
- 生成された Web ページのキャッシュの問題
- まったく違うもの
私がすでに試したこと:
- Apache を再起動しても、期間が「1 回の回復」に変更されないようです。
- Perl の即時フラッシュは、
$|=1;
問題がどこにあるのか、誰にも手がかりがありますか?
これは、効果を再現できるテスト スクリプトです。
#!/Programme/perl/perl/bin/perl
$| = 1;
use strict;
use CGI qw/:standard -nosticky -debug/; # CGI scripting
use CGI::Carp qw(fatalsToBrowser); # show error messages in browser
use CGI::Session qw(-ip_match);
my $cgi;
my $top = 30;
my $i;
$cgi = new CGI;
print <<EOF;
Expires: -1
Cache-control: no-store
Pragma: no-cache
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/transitional.dtd">
<html>
<head>
<title>Testpage</title>
<meta http-equiv="Content-Type" content="text/html"; charset="iso-8859-1">
<META HTTP-EQUIV="expires" CONTENT="-1">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</head>
<body bgcolor="#efefef" text="#000000" marginwidth="0" marginheight="0">
EOF
for ($i=0;$i<10000;$i++){
# any popup_menu
print $cgi->popup_menu(-name => "monthSel$i",
-values => [1,2,3,4,5,6,7,8,9,10,11,12],
-default => 1,
-override => 1,
-style => 'position:absolute; top: '. $top . 'px; left:50px'
);
$top += 30;
}
# close body
print "</body>";