JSP - коды состояния HTTP
В этой главе мы обсудим коды состояния HTTP в JSP. Формат HTTP-запроса и сообщений HTTP-ответа аналогичен и будет иметь следующую структуру:
Начальная строка состояния + CRLF (возврат каретки + перевод строки, т.е. новая строка)
Ноль или более строк заголовка + CRLF
Пустая строка т.е. CRLF
Необязательное тело сообщения, такое как файл, данные запроса или выходные данные запроса.
Например, заголовок ответа сервера выглядит следующим образом -
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
Строка состояния состоит из HTTP version (HTTP/1.1 in the example), код состояния (200 в примере) и очень короткое сообщение, соответствующее коду состояния (OK in the example).
В следующей таблице перечислены коды состояния HTTP и связанные сообщения, которые могут быть возвращены веб-сервером.
Код | Сообщение | Описание |
---|---|---|
100 | Продолжить | Сервер получил только часть запроса, но пока он не был отклонен, клиент должен продолжить выполнение запроса. |
101 | Переключение протоколов | Сервер переключает протокол. |
200 | Хорошо | Запрос в порядке |
201 | Создано | Запрос выполнен, и новый ресурс создан |
202 | Принятый | Запрос принят в обработку, но обработка не завершена. |
203 | Неавторизованная информация | |
204 | Без содержания | |
205 | Сбросить содержимое | |
206 | Частичное содержание | |
300 | Множественный выбор | Список ссылок; пользователь может выбрать ссылку и перейти в это место. Максимум пять адресов. |
301 | переехал навсегда | Запрошенная страница перемещена на новый URL. |
302 | Найденный | Запрошенная страница временно перемещена на новый URL. |
303 | См. Другое | Запрошенную страницу можно найти по другому URL-адресу. |
304 | Не изменено | |
305 | Используй прокси | |
306 | Неиспользованный | Этот код использовался в предыдущей версии. Он больше не используется, но код зарезервирован. |
307 | Временное перенаправление | Запрошенная страница временно перемещена на новый URL. |
400 | Плохой запрос | Сервер не понял запрос. |
401 | Неавторизованный | Запрошенная страница требует имени пользователя и пароля. |
402 | Требуется оплата | Вы пока не можете использовать этот код. |
403 | Запрещено | Доступ к запрошенной странице запрещен |
404 | не обнаружена | Сервер не может найти запрошенную страницу. |
405 | метод не разрешен | Указанный в запросе метод недопустим. |
406 | Неприемлимо | Сервер может только генерировать ответ, который не принимается клиентом. |
407 | Требуется проверка подлинности прокси | Вы должны пройти аутентификацию на прокси-сервере, прежде чем этот запрос будет обработан. |
408 | Тайм-аут запроса | Запрос занял больше времени, чем сервер был готов ждать. |
409 | Конфликт | Запрос не может быть выполнен из-за конфликта. |
410 | Прошло | Запрошенная страница больше не доступна. |
411 | Требуемая длина | "Content-Length" не определено. Без него сервер не примет запрос. |
412 | Предварительное условие не выполнено | Предварительное условие, указанное в запросе, оценивается сервером как ложное. |
413 | Слишком большой объект запроса | Сервер не примет запрос, поскольку объект запроса слишком велик. |
414 | Запрос-url слишком длинный | Сервер не примет запрос, потому что URL-адрес слишком длинный. Это происходит, когда вы конвертируете запрос «post» в запрос «get» с длинной информацией запроса. |
415 | Неподдерживаемый тип носителя | Сервер не примет запрос, потому что этот тип носителя не поддерживается. |
417 | Ожидание не удалось | |
500 | Внутренняя ошибка сервера | Запрос не был выполнен. Сервер обнаружил непредвиденное состояние. |
501 | Не реализованы | Запрос не был выполнен. Сервер не поддерживает требуемые функции. |
502 | Плохой шлюз | Запрос не был выполнен. Сервер получил недопустимый ответ от вышестоящего сервера. |
503 | Сервис недоступен | Запрос не был выполнен. Сервер временно перегружен или не работает. |
504 | Тайм-аут шлюза | Истекло время ожидания шлюза. |
505 | Версия HTTP не поддерживается | Сервер не поддерживает "http protocol" версия. |
Способы установки кода состояния HTTP
Следующие методы можно использовать для установки кода состояния HTTP в вашей программе сервлета. Эти методы доступны с объектом HttpServletResponse .
S.No. | Метод и описание |
---|---|
1 | public void setStatus ( int statusCode ) Этот метод устанавливает произвольный код состояния. Метод setStatus принимает в качестве аргумента int (код состояния). Если в вашем ответе есть специальный код статуса и документ, обязательно позвонитеsetStatusперед фактическим возвратом любого содержимого с помощью PrintWriter . |
2 | public void sendRedirect(String url) Этот метод генерирует ответ 302 вместе с заголовком Location, содержащим URL-адрес нового документа. |
3 | public void sendError(int code, String message) Этот метод отправляет код состояния (обычно 404) вместе с коротким сообщением, которое автоматически форматируется внутри HTML-документа и отправляется клиенту. |
Пример кода состояния HTTP
В следующем примере показано, как код ошибки 407 отправляется в клиентский браузер. После этого браузер покажет вам "Need authentication!!!"сообщение.
<html>
<head>
<title>Setting HTTP Status Code</title>
</head>
<body>
<%
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
%>
</body>
</html>
Вы получите следующий вывод -
HTTP Status 407 - Need authentication!!!
type Status report
message Need authentication!!!
description The client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29
Чтобы вам было удобнее работать с кодами состояния HTTP, попробуйте установить разные коды состояния и их описание.