我可以在收到HTTP请求之前回复吗?

时间:2014-03-15 03:17:18

标签: http

澄清:我正在用C ++编写HTTP服务器。我确切知道我收到了多少数据,并且我正在以块的形式解析HTTP请求。因此,在我收到整个请求之前,我可以知道方法是什么。

请考虑以下情形:我收到的HTTP请求的方法设置为' DO_WORK'。这是不受支持的(只是一个例子),我应该回复405(不支持的方法)。但是,我能多快这样做?

在发送回复之前,我应该等到收到整个请求吗?

3 个答案:

答案 0 :(得分:2)

除非有技术原因禁止,否则您通常可以在准备好后立即发送回复,因为客户在完全发送请求之前不会阅读回复。但是,您必须阅读完整请求,除非您在发送回复后断开连接。

答案 1 :(得分:0)

您可以使用mitmproxy之类的工具拦截来电并返回您想要的内容。

答案 2 :(得分:0)

如果您使用的是Apache,则可以设置LIMIT指令: http://httpd.apache.org/docs/current/mod/core.html#limit

我不知道它是否会理解DO_WORK,但您可以尝试这样做: https://serverfault.com/questions/333610/apache-and-custom-http-method

如果您只想将其限制为某些方法,请执行limitexcept:

<Directory .../.../>
        ...
        <LimitExcept GET POST>
              Order deny,allow
              Deny from all
        </LimitExcept>
   </Directory>

我还没有测试过这个。

此外,您还不知道通过网络传递了多少邮件。如果它很聪明,服务器只会先发送标题,然后再发送部分主体。但是如果消息很小,它可能会立即发送标题和消息。