Firefox 如何获得cgi脚本的部分输出(逐段)

Firefox 如何获得cgi脚本的部分输出(逐段),firefox,output-buffering,apache,Firefox,Output Buffering,Apache,给出以下小cgi脚本: #!/bin/bash echo "Content-type: text/html" echo "" echo '<html>' echo '<head>' echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">' echo '</head>' echo '<body>' if [ $QUERY_STRING="yes

给出以下小cgi脚本:

#!/bin/bash

echo "Content-type: text/html"
echo ""

echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '</head>'
echo '<body>'
if [ $QUERY_STRING="yes" ]; then
    echo "before"
    sleep 5
    echo "after"
fi
echo '</body>'
echo '</html>'
#/bin/bash
echo“内容类型:文本/html”
回声“”
回声“
回声“
回声“
回声“
回声“
如果[$QUERY_STRING=“yes”];然后
回音“以前”
睡眠5
回音“之后”
fi
回声“
回声“

我如何才能在浏览器中按此顺序先获取“之前”的输出,然后获取5秒的延迟,然后获取“之后”的输出?

鉴于您在评论中提供的各种信息,该问题很可能是由Apache级别的一些输出缓冲造成的

要“流”您的CGI输出,您绝对需要禁用(至少对于包含您的CGI的目录)。如果对配置使用
.htaccess
,类似的方法可能会起作用:



我给你的问题加了个标签,希望有人能提供更好的信息。如果确认问题出在Apache配置上,您可能会更幸运地继续提问。

目前情况如何?IMHO bash尊重“sleep”,但您的浏览器会将显示延迟到
标记。您是否尝试过在块显示元素中换行“before”和“after”(例如,
)。标记没有任何区别。我试着和。这里的“睡眠”只是一些耗时操作的占位符。这延迟输出正是我想要摆脱的。“这延迟输出正是我想要摆脱的。”这只是猜测。您确定浏览器“推迟”显示吗?也许输出流只是被缓冲在某个地方?也许是通过你的网络服务器?你必须明确指出输出被“阻止”的地方,并编辑你的问题以提供必要的信息。我不知道延迟的来源。我可以尝试进行哪些设置,以确定是我的案例中的apache2配置还是浏览器(我尝试过Safari和IE,两者的行为相同)。“我不知道延迟的来源”如果我是你,我会尝试使用或任何其他网络分析仪捕获流。这将向您显示数据包的“定时”——因此您将看到流中是否存在预期的延迟。也许有一个更基本的工具可以做到这一点?我不知道。谢谢你的提示。不幸的是,他们没有解决这个问题。奇怪的是,一旦它表现得像被清除了一样,就尝试了10次。我想这也是关于缓冲的。此外,原始示例(上面的示例是分解的摘录)在不同的BRWOSER上表现不同。它在Safari和IE上的工作方式与预期相同,在Firefox和OperaUpdate上则不同:这不是apache的问题。“netcat”显示响应是由Apache逐段发送的。IE显示延迟输出,Safari和Firefox没有。这是特定于浏览器的。感谢@AlexanderStippler提供此反馈。我的答案仅供将来参考。如果这是特定于浏览器的,您必须找到一个跨浏览器工作的“技巧”。也许是一些聪明的JavaScript?无论如何,这现在是一个更加困难的问题!你应该用这些不同的信息更新你的问题,以吸引精通该领域的回答者。
Options +ExecCGI
AddHandler cgi-script .cgi .sh
SetEnv no-gzip dont-vary