使用perl的cgi脚本和apache进行大小或配置限制

时间:2012-12-30 09:29:29

标签: perl apache cgi

我正在尝试通过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>";

1 个答案:

答案 0 :(得分:0)

好吧,我想我已经解决了这个问题,虽然我没有找到这个问题的根本原因。

步骤:

  • 当我使用其他系统测试时,一切正常(至少5000个弹出菜单的情况)。
  • localhost本身无法正常工作
  • :强制数据包通过常规网络堆栈时(最初用Wireshark调试,页面显示正确!

结论:似乎是系统的内部问题

在此处找到了通过网络堆栈强制本地数据包的方法:Sniffer for localhost (Windows OS)(使用http://localhost./代替http://localhost/