【问题标题】:Java sockets closing HTTP 1.0 connectionsJava 套接字关闭 HTTP 1.0 连接
【发布时间】:2012-02-05 15:11:39
【问题描述】:

我正在编写一个小型 Web 服务器,但在解析请求时遇到了问题。我将一个 BufferedReader 解析为一个 LinkedList(这样我就可以根据发送的 POST 数据执行操作。)我发现this answer 解释说由于连接挂起,缓冲区没有终止。我不知道如何关闭它。

我如何打开套接字(以及我是如何关闭它的):

            Socket connectionSocket = serverSocket.accept();
            InetAddress client = connectionSocket.getInetAddress();

            System.out.println(client.getHostName() + " connected to server.");

            BufferedReader input = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream(), "UTF-8"));

            DataOutputStream output = new DataOutputStream(connectionSocket.getOutputStream());

            output.writeUTF(httpHeader(200));

            httpHandler(input, output);

            connectionSocket.close();

httpHeader 方法形成一个简单的字符串,第一行是“HTTP/1.0”,在这种情况下,下一行是“200 OK”,最后是一个新行。发送的 POST 请求是 HTTP 1.0。

尽可能简洁,我的问题有两个:如何正确响应和关闭 HTTP 1.0 POST 请求/套接字?

【问题讨论】:

    标签: java http parsing sockets webserver


    【解决方案1】:

    POST 请求具有关联的数据,并且必须伴随一个 Content-Length 标头,指定该 POST 数据的确切长度。

    因此,您必须首先实现所有 HTTP 标头,解码 Content-Length,然后读取 POST 数据(即,与 HTTP 一样,与标头之间用空行分隔)。

    如果数据量不够,或数据太多,或你甚至没有收到Content-Length头,那么你应该返回 400。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2013-02-17
      • 2014-09-09
      • 2013-07-23
      • 2018-09-09
      相关资源
      最近更新 更多