HTTP服务器:如果收到的标题太长,该怎么办?如何管理流?

时间:2014-03-10 18:38:36

标签: java http

我已经建立了一个HTTP服务器,这里有一些问题。假设 - 当服务器正在接收HTTP标头时 - 它也在计算接收到的数据大小。如果一些黑客试图发送让我们说的标头是100 MB,并且服务器配置为接受最多1 MB的标头 - 如何在这种情况下继续?我可以关闭连接,或者中断此循环并使用一些错误代码发送响应:

 BufferedInputStream is = new BufferedInputStream(socket.getInputStream(), 2048);

 int read;
 while ((read = is.read(bufferData, 0, 2048)) != -1) {
    //If header too long - what to do? Break and close connection or just break and send response?
 }

如果我突然停止接收数据(当客户端仍在传输时) - 然后会开始向OutputStream写一些日期 - 会发生什么?

1 个答案:

答案 0 :(得分:1)

您应该发回HTTP错误。我建议使用状态代码400:错误请求或状态代码431(将Julian归功于下面的Julian)。您可以在循环中使用整数来跟踪并确保没有超出限制。

为了解决这个问题,我会停止阅读数据。您通常希望将所有流关闭在一起,因此我会抛出异常以突破循环并在catch块中发回错误代码。处理finally块中的关闭连接。