dar*_*ron 5 forms apache post cgi apache2
我正在尝试在CGI中提供文件上传的实时解析,并在屏幕上显示数据.
但是,Apache2似乎想要在完全发送CGI应用程序之前等待完整的POST完成.
如何强制Apache2停止缓冲POST到我的CGI应用程序?
编辑
看起来它实际上是被缓冲的CGI的输出.我开始将数据流式传输到临时文件以观察其进度.那,我有另一个问题.
1)输出正在缓冲.我已经尝试了SetEnvIf(简称SetEnv)用于"!nogzip","nogzip"和"!gzip"但没有成功(在CGI目录定义中).
2)在CGI进程退出之前,Apache2似乎没有读取CGI的输出?我注意到我的CGI应用程序(正在刷新与否)在80K左右的"fwrite(...,stdout)"行上永久挂起.
编辑
好吧,Firefox正在搞乱我.如果我发送150K文件,那么80K左右就没有CGI锁定.如果文件是2G,则有一个锁定.因此,Firefox在尝试发送文件时没有从服务器读取输出...是否有任何标题或备用内容类型来更改该行为?
编辑
好吧,我想大文件上的CGI输出锁定实际上并不重要.我不需要回显文件!我正在调试由调试辅助工具引起的问题.:)
我想这个效果还不错.谢谢!
最后的说明
就像一个注释......我认为Apache2缓冲输入的原因是我总是得到一个"Content-Length"环境变量.我猜FireFox足够聪明,可以预先计算多部分表单上传的内容长度,而Apache2正在传递它.我认为Apache2正在缓冲输入并报告长度本身.
您确定缓冲的输入是问题所在吗?如果您的调试方法类似于响应的print\xe2\x80\x8bing ,则输出缓冲问题更为常见,并且可能无法与输入缓冲区分开来。
(输出缓冲通常是由stdout脚本中的未刷新或过滤器引起的。通常的罪魁祸首是DEFLATE过滤器,它通常用于压缩所有text/响应,无论它们来自静态文件还是脚本。总的来说,它是好的压缩脚本输出的想法,但它会导致响应被完全缓冲的副作用。如果您需要立即响应,则需要通过限制来为该一个脚本或所有脚本关闭它应用AddOutputFilterByType到特定的<Directory>\xe2\x80\x8bs,或用于mod_setenvif设置!nogzip注释。)
类似地,输入过滤器(再次包括DEFLATE)可能会导致 CGI 输入被缓冲(如果您正在使用任何过滤器)。但它们的使用不太广泛。
编辑:现在,只需注释掉启用 deflate 过滤器的任何 httpd conf。一旦您确信 IO 在没有它的情况下是无缓冲的,您就可以有选择地把它放回去。
\n\n\n\n\n我注意到我的 CGI 应用程序(无论是否刷新)在 80K 左右永久挂在“fwrite(..., stdout)”行上。
\n
是的...如果您没有读取所有输入,那么在尝试写入输出时,如果您写入太多,则可能会陷入僵局。您可以阻止输出调用,等待网络缓冲区疏通,以便您可以发送您获得的新数据,但它们永远不会这样做,因为浏览器在开始读取输出之前尝试发送其所有数据。
\n\n你在这里做什么工作?一般来说,编写进度信息输出来响应直接表单 POST 是没有意义的,因为浏览器通常不会显示它。如果您想在纯 HTML 表单提交上提供上传进度反馈,通常可以通过一些技巧来完成,例如使用 AJAX 连接检查上传进度(这意味着必须共享进度信息,例如在数据库中) ),或者使用Flash上传组件。
\n| 归档时间: |
|
| 查看次数: |
4836 次 |
| 最近记录: |