我试图找到通过 Perl CGI 脚本生成的相当大的 HTML 页面的问题。
只要生成的网页大小不超过 1 MB,我的 CGI 脚本就可以工作。
但是一旦网页大小超过 1 MB,页面就会在我的浏览器中显示一次正确,但重新加载后页面将被切断为 1 MB。效果会保持一段时间(> 5 分钟?),然后在重新加载一次后消失。
我想我确定了问题的一些可能来源:
- perl 打印到的问题
STDOUT
- Apache 限制/错误
- Apache的配置问题
- 生成网页的缓存问题
- 完全不同的东西
我已经尝试过的:
- 重新启动 Apache 似乎不会将持续时间更改为“一次修复”。
- 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>";