我正在处理一个接受文件上传的页面。理论上,我可以检测到他们发送给我的文件何时过大(通过查看他们响应的 Content-Length),并拒绝接受上传,返回 HTTP 413“Request Entity Too Large”错误。
但是,似乎仅仅这样做是不够的——至少,Firefox 仍会在显示我的错误页面之前继续发送文件的其余部分(这可能需要很长时间)。
HTTP 规范说我:“可以关闭连接以防止客户端继续请求。” 但是,执行“关闭 STDIN”、“关闭 STDIN,0”或其他一些变体似乎都不起作用——Firefox 仍然继续发送文件。
我怀疑,当我的 mod_perl 处理程序关闭连接时,它只是关闭了自身与 Apache 之间的连接;Apache 保持它与客户端之间的连接处于活动状态。有什么方法可以告诉 Apache 关闭连接吗?否则,这似乎是一个很好的 DoS 向量。
欢迎大家提出意见。