English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

HTTP-��态 коды Servlet

Формат HTTP-запросов и HTTP-ответов аналогичен, структура следующая:

  • Начальная строка состояния + символы возврата каретки и перевода строки (возврат каретки + перевод строки)

  • Ноль или несколько заголовков + символы возврата каретки и перевода строки

  • Пробел, представляющий собой символы возврата каретки и перевода строки

  • Опциональное сообщение с телом, например файл, данные запроса или вывод запроса

Например, заголовки ответа сервера могут выглядеть так:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Пробел)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

Строка состояния включает версию HTTP (в данном примере HTTP/1.1), статус-код (в данном примере 200) и короткое сообщение, соответствующее статус-коду (в данном примере OK).

Ниже приведен список возможных HTTP-статус-кодов веб-сервера и связанных с ними информации:

КодСообщениеОписание
100ПродолжитьТолько часть запроса была принята сервером, но если она не была отклонена, клиент должен продолжить этот запрос.
101Переключение протоколовСервер переключает протокол.
200OKЗапрос успешен.
201СозданЗапрос полон и создает новый ресурс.
202ПринятЗапрос принят и обработан, но обработка была неполной.
203Неавторитетная информация 
204Нет содержимого 
205Сброс содержимого 
206Частичное содержимое 
300Множественные возможностиСписок ссылок. Пользователь может выбрать ссылку и перейти к этому месту. Максимально пять адресов.
301Перемещено навсегдаЗапрошенная страница была перемещена на новый URL.
302FoundЗапрашиваемая страница временно перенесена на новый URL.
302НайденоСм. Другое
Запрашиваемая страница может быть найдена по другому URL.304 
Не измененоИспользуйте прокси 
306НеиспользованныйИспользовался в предыдущих версиях. В настоящее время не используется, но код все еще сохраняется.
307Временное перенаправлениеЗапрашиваемая страница временно перенесена на новый URL.
400Плохой запросСервер не понимает запрос.
401Не авторизованЗапрашиваемая страница требует имя пользователя и пароль.
402Требуется оплатаВы еще не можете использовать этот код.
403ЗапрещенДоступ к запрашиваемой странице запрещен.
404Не найденоСервер не может найти запрашиваемую страницу.
405Метод не разрешенМетод, указанный в запросе, не разрешен.
406Не приемлемоСервер генерирует только один ответ, который не принят клиентом.
407Требуется аутентификация проксиПрежде чем送达 запрос, вам нужно использовать аутентификацию прокси-сервера.
408Timeout запросаЗапрос требует больше времени, чем сервер может ждать, timeout.
409КонфликтЗапрос не может быть выполнен из-за конфликта.
410УшедшийЗапрашиваемая страница больше не доступна.
411Требуется длина"Content-Length" не определено. Сервер не может обработать запрос от клиента без Content-Length.
412Предположение не выполненоПредположение, указанное в запросе, оценено сервером как false.
413Запрос содержит слишком большой объектСервер не принимает этот запрос, потому что запрос содержит слишком большой объект.
414URL запроса слишком длинныйСервер не принимает этот запрос, потому что URL слишком длинный. Это происходит, когда вы преобразуете запрос "post" в запрос "get" с длинной информацией в запросе.
415Неподдерживаемый тип媒体Сервер не принимает этот запрос, потому что тип媒体 не поддерживается.
417Неудовлетворенные ожидания 
500Внутренняя ошибка сервераНе завершенный запрос. Сервер встретил неожиданную ситуацию.
501Not Implementedнедоконченный запрос. Сервер не поддерживает необходимую функцию.
502Bad Gatewayнедоконченный запрос. Сервер получил недействительный ответ от upstream сервера.
503Service Unavailableнедоконченный запрос. Сервер временно перегружен или завис.
504Gateway TimeoutGateway Timeout
505HTTP Version Not Supportedсервер не поддерживает "версию HTTP протокола".

методы установки HTTP статуса кода

Следующие методы могут быть использованы для установки HTTP статуса кода в Servlet программе. Эти методы через HttpServletResponse объект доступен.

номерномер. метод & описание
1public void setStatus ( int statusCode )
Этот метод устанавливает произвольный статус код. Метод setStatus принимает int (статус код) в качестве параметра. Если ваш ответ содержит особый статус кода и документ, убедитесь, что вы используете PrintWriter перед тем как вернуть любое содержимое, вызовите setStatus.
2public void sendRedirect(String url)
Этот метод генерирует ответ 302 вместе с новым URL документа. Location заголовок.
3public void sendError(int code, String message)
Этот метод отправляет статус кода (обычно 404) вместе с коротким сообщением, которое автоматически форматируется и отправляется клиенту в документе HTML.

Пример HTTP статуса кода

Этот пример отправляет код ошибки 407 в браузер клиента, который показывает сообщение "Need authentication!!!".

// импорт необходимых java библиотек
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import javax.servlet.annotation.WebServlet;
@WebServlet("/showError")
// расширение класса HttpServlet
public class showError extends HttpServlet {
 
  // Обработка GET метода запроса метода
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // Установка кода ошибки и причины
      response.sendError(407, "Необходимо аутентификация!!!" );
  }
  // Обработка POST метода запроса метода
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

Теперь, вызов上面的 Servlet покажет следующий результат:

HTTP Status 407 - Необходимо аутентификация!!!

тип Отчет о статусе

сообщение Необходимо аутентификация!!!

описание Клиент сначала должен аутентифицировать себя через прокси (Необходимо аутентификация!!!).

Apache Tomcat/5.5.29