Форматы 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, вы получите следующие результаты:
Вы также можете попробовать использовать другие коды состояния, чтобы увидеть, получите ли вы неожиданные результаты.