Как вы отправляете страницу с ошибкой 503 непосредственно с помощью Java-сокетов

#java #sockets #httpresponse #apache-httpcomponents

#java #розетки #httpresponse httpresponse ответ #apache-httpкомпоненты

Вопрос:

Я пытаюсь создать простой сервер на Java.

По сути, все, что у меня есть на данный момент ServerSocket , — это прослушивание порта. Он работает хорошо. Я хочу реализовать способность серверов отвечать на запросы. Для начала я хочу ответить на плохие запросы с помощью a 503 .

Лучшая идея, которая у меня есть для этого, — использовать a BufferedWriter , чтобы сделать что-то вроде

 ...
 out.write("HTTP/1.0 503 Bad Requestrn");
 out.write("Date: Mon, 23 Jun 2014 23:59:59 GMTrn");
 out.write("Server: Apache/1.3.2rn");
...
 

Однако это кажется очень подверженным ошибкам. Кроме того, я просмотрел HttpComponents примеры Apache, и у них есть встроенный класс, HttpResponses однако их использование настолько сложно и требует создания целой инфраструктуры вокруг них.

Есть ли у кого-нибудь какие-либо предложения о том, как просто вернуть HttpResponse s в Java?

Комментарии:

1. Вот почему существуют HTTP-фреймворки. Посмотрите на сервлеты.

2. Почему вы хотите сделать это вручную?

Ответ №1:

Отправка 503 клиентам из простого серверного сокета не является хорошей идеей, если только клиент и сервер не согласны реализовать протокол HTTP с обеих сторон.

При работе с обычными соединениями с сокетами вы работаете на уровне TCP сетевого стека. Использование логики приложения на уровне TCP не является хорошей идеей, и, следовательно, существуют протоколы прикладного уровня, такие как HTTP.

И если нет реальной необходимости писать новую реализацию протокола, такого как HTTP, тогда не делайте этого. Попробуйте использовать существующие реализации, такие как сервлеты на Java.

Надеюсь, это поможет.

Комментарии:

1. Ну да, предполагая, что сокет и сервер согласны HTTP … Я не хочу использовать сервлеты в этом случае

Ответ №2:

HTTP-заголовок заканчивается на double r n, поэтому после вашего последнего поля заголовка добавьте второе r n .