Форматы HTTP-запросов и HTTP-ответов схожи, и оба имеют следующую структуру:
Начните со строки состояния + CRLF (возврат каретки и перевод строки)
Модуль заголовка с нулевой или несколькими строками + CRLF
Пустая строка, например CRLF.
Необязательное тело сообщения, например файл, данные запроса, выходные данные запроса.
Например, заголовок ответа сервера выглядит так:
HTTP/1.1 200 OKContent-Type: text/htmlHeader2: ...HeaderN: ... (пустая строка)<!doctype ...><html><head>...</head><body> ... </body></html>
Строка состояния содержит версию HTTP, код состояния и короткое сообщение, соответствующее коду состояния.
В следующей таблице перечислены коды состояния HTTP и связанные с ними сообщения, которые могут быть возвращены с сервера:
| код состояния | информация | описывать |
|---|---|---|
| 100 | Продолжать | Сервер принимает только часть запроса, но пока он не отклонен сервером, клиент будет продолжать запрос. |
| 101 | Переключение протоколов | протокол переключения серверов |
| 200 | ХОРОШО | Запрос подтвержден |
| 201 | Созданный | Запрос выполнен, и новый ресурс создан. |
| 202 | Принял | Запрос принят, но не обработан |
| 203 | Неавторитетная информация | |
| 204 | Нет контента | |
| 205 | Сбросить контент | |
| 206 | Частичное содержание | |
| 300 | Несколько вариантов | Таблица гиперссылок. Пользователи могут выбрать гиперссылку и получить к ней доступ. Поддерживается максимум 5 гиперссылок. |
| 301 | Переехал навсегда | Запрошенная страница была перемещена на новый URL. |
| 302 | Найденный | Запрошенная страница временно перемещена на новый URL. |
| 303 | См. другое | Запрошенную страницу можно найти по другому URL. |
| 304 | Не изменено | |
| 305 | Использовать прокси | |
| 306 | Неиспользованный | Этот код состояния больше не используется, но код состояния сохраняется. |
| 307 | Временное перенаправление | Запрошенная страница временно перемещена на новый URL. |
| 400 | Неверный запрос | Сервер не распознает запрос |
| 401 | Несанкционированный | Запрошенная страница требует имени пользователя и пароля. |
| 402 | Требуется оплата | Этот код состояния пока нельзя использовать |
| 403 | Запрещенный | Доступ к запрошенной странице запрещен |
| 404 | Не найдено | Сервер не может найти запрошенную страницу |
| 405 | Метод не разрешен | Метод, указанный в запросе, не разрешен. |
| 406 | Не приемлемо | Сервер может создать только ответ, неприемлемый для клиента. |
| 407 | Требуется аутентификация прокси | Прокси-сервер должен быть аутентифицирован перед обработкой запросов. |
| 408 | Тайм-аут запроса | Время запроса превысило время ожидания сервера, и соединение было разорвано. |
| 409 | Конфликт | В запросе конфликт |
| 410 | Ушел | Запрошенная страница больше не доступна |
| 411 | Требуемая длина | «Длина контента» не определена, сервер отказался принять запрос |
| 412 | Предварительное условие не выполнено | Запрошенное предварительное условие было оценено сервером как ложное. |
| 413 | Запрос объекта слишком велик | Сервер отказался принять запрос, поскольку запрошенный объект был слишком большим. |
| 414 | URL-адрес запроса слишком длинный | Сервер отказался принять запрос, поскольку URL-адрес был слишком длинным. При преобразовании запроса «POST» в запрос «GET» часто появляется большой объем информации запроса. |
| 415 | Неподдерживаемый тип носителя | Сервер отказался принять запрос, поскольку тип носителя не поддерживается. |
| 417 | Ожидание не оправдалось | |
| 500 | Внутренняя ошибка сервера | Запрос был неполным, и на сервере возникла непредвиденная ситуация. |
| 501 | Не реализовано | Запрос неполный и сервер не обеспечивает необходимую функциональность |
| 502 | Плохой шлюз | Запрос был неполным, и сервер получил недопустимый ответ от вышестоящего сервера. |
| 503 | Сервис недоступен | Запрос неполный, и сервер временно перезапускается или отключается. |
| 504 | Тайм-аут шлюза | Тайм-аут шлюза |
| 505 | Версия HTTP не поддерживается | Сервер не поддерживает указанную версию HTTP |
В следующей таблице перечислены методы, используемые для установки кодов состояния в классе HttpServletResponse:
| СН | Метод и описание |
|---|---|
| 1 | public void setStatus (int statusCode) Этот метод может установить любой код состояния. Если ваш ответ содержит специальный код состояния и документ, обязательно вызовите метод setStatus, прежде чем возвращать что-либо с помощью PrintWriter. |
| 2 | public void sendRedirect(String url) Этот метод генерирует ответ 302 и заголовок Location, чтобы сообщить URL-адресу о новом документе. |
| 3 | public void sendError(int code, String message) Этот метод автоматически вставляет код состояния (обычно 404) и короткое сообщение в HTML-документ и отправляет его обратно клиенту. |
В следующем примере в браузер будет отправлен код ошибки 407, и браузер сообщит вам: «Нужна аутентификация!!!».
<html><head><title>Установка кода состояния HTTP</title></head><body><% // Установите код ошибки и объясните причину response.sendError(407, «Нужна аутентификация!!!») ) ; %></body></html>
Посетив вышеуказанную страницу JSP, вы получите следующие результаты:

Вы также можете попробовать использовать другие коды состояния, чтобы увидеть, получите ли вы неожиданные результаты.