Сокеты Java, закрывающие соединения HTTP 1.0 - PullRequest
0 голосов
/ 09 января 2012

Я пишу небольшой веб-сервер, и у меня проблема с анализом запроса. Я анализирую BufferedReader в LinkedList (чтобы я мог выполнить операцию на основе отправленных данных POST). Я нашел этот ответ , объясняющий, что буфер не завершен из-за разрыва соединения. Я не уверен, как закрыть его.

Как мне открыть сокет (и как я думал закрыть его):

            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?

1 Ответ

1 голос
/ 09 января 2012

Запрос POST имеет связанные данные и ДОЛЖЕН сопровождаться заголовком Content-Length, указывающим точную длину этих данных POST.

Итак, вы должны сначала вывести все заголовки HTTP, декодировать Content-Length, а затем прочитать данные POST (которые, как это принято в случае с HTTP, отделены от заголовков пустой строкой).

Если объем данных недостаточен, или слишком много, или вы даже не получите заголовок Content-Length, тогда вы должны вернуть 400 .

...