在读取正文之前拒绝HTTP请求

时间:2011-05-30 16:24:27

标签: apache http mod-perl

我正在开发一个网站,用户需要上传一些非常大的文件。该网站是用PHP编写的。

在某些情况下,我会根据标头拒绝文件。理想情况下,我想在收到标题后立即拒绝请求而不读取正文。如果标题足以告诉文件应该被拒绝,则没有理由读取200M文件。另外,当我接受请求时,我想定期保存在收到请求主体时读取的字节数。

我知道PHP是不可能的,因为在PHP获得它之前会读取整个HTTP请求。我有什么选择?我从未使用过Perl,但我读到mod_perl可以访问Apache API。是否可以使用mod_perl执行此操作?一个Apache模块?

3 个答案:

答案 0 :(得分:0)

使用标准PHP处理程序几乎不可能。在解析之前你没有得到请求,遗憾的是没有好的方法可以推迟。

编辑:我在使用commons fileupload库的流模式和java方面有很好的经验。合并到Apache配置有点麻烦,但如果你正在谈论200M文件,那么值得节省带宽。

答案 1 :(得分:0)

如果您可以对拒绝文件的规则进行硬编码,则可以在.htaccess中使用mod_rewrite规则。使用%{HTTP:标题}条件:

RewriteCond %{HTTP:AcceptThisFile} False [NC]
RewriteRule (...)

答案 2 :(得分:0)

可以使用“简单”正则表达式进行modsecurity。这是在Apache2中,并在收到整个文件之前执行。您可以先阅读一下文档:

http://www.modsecurity.org/documentation/modsecurity-apache/2.5.5/modsecurity2-apache-reference.html

您也可以保留默认规则,因为它们也会禁止许多无用的访问,尽管删除那些实际上阻止您自己的网站正常工作的规则需要时间,因此删除所有这些默认规则可能会很好想法。