Главная » Java, Web » Коды состояния

0

В HTTP используются коды состояния, которые несут некоторую общую мета-информацию о том, как был выполнен запрос. Когда \?еЬ~сервер посылает ответ браузеру или другому клиенту, от которого он получил запрос, то ответ, как правило, включает в себя строку состояния, заголовки, пустую строку, отделяющую заголовки от тела ответа, и сам документ, посылаемый в качестве ответа. В простейшем случае ответ может быть следующим: НТТР/1.1 200 ОК Content-Type: text/plain

Hello, World!

Строка состояния включает в себя информацию о версии HTTP, которая есть целое число. Затем следует код состояния. После строки состояния идут строки с заголовками, в частности, строка, задающая mime-тип посылаемого документа. Строки заголовков отделяются от тела ответа пустой строкой. Наиболее распространенные коды состояний приведены ниже.

?       100 — продолжение выполнения запроса.

?       101 — изменение протокола, сервер меняет протокол (на новый HTTP 1.1).

?      200 — ОК. Все в порядке. Если не задан другой ответ для строки статуса, то, как правило, получают именно такой заголовок при работе с сервле- тами.

?      201 — Created. Сервер создал документ, заголовок Location содержит со- ответсвующий URL.

?      202 — Accepted. Запрос принят к обработке, которая еще не завершена.

?      203 — Несоответствующая информация. Документ возвращается обычным порядком, но некоторые заголовки могут быть неточными.

?      204 — No Content. Нет нового документа, браузер должен продолжать показывать старый документ. Это полезно в том случае, если пользователь периодически перезагружает страницу (обновляет ее). Этот код не работает со страницами, которые производят автоматическое обновление с помощью заголовка Refresh ИЛИ ярлыка <МЕТА HTTP-EQUIV= "Refresh" . . .>, поскольку получаемый код статуса прекращает перезагрузку. В таких ситу- циях автоматическая перезагрузка с использованием JavaScript вполне работоспособна.

?      205 — Reset Content. Нового документа нет, но браузер должен обновить вид документа. Полезно в тех случаях, когда необходимо очистить поля CGI-формы.

?      206 — Partial Content. Клиент посылает частичный запрос, сервер удовлетворяет его.

?      300 — Multiple Choices. Множественный документ, который может быть обнаружен в нескольких местах. Предпочтительное положение передается браузеру В заголовке Location.

?      301 — Удалено навсегда (Moved Permanently). Документ удален, браузер должен перейти по указанному в заголовке Location адресу URL.

?      302 — Found. Схоже с 301, но запрашиваемый URL временно удален.

?      303 — See Other. Схоже с 301 и 302, но если запрос использовал метод post, то документ, на который происходит переадресация, будет запрошен с использованием метода get.

?      304 — Not Modified. Клиент сохраняет документ в кэше и выполняет условный запрос (например, с использованием заголовка if-Modified-since). Сервер сообщает клиенту, что старый документ не был изменен, то есть можно использовать документ, хранящийся в кэше.

?      305 — Use Proxy. Запрошенный документ должен быть получен через прокси-сервер, указанный в заголовке Location.

?      307 — Temporary Redirect. Идентично 302.

?     400 — Bad Request. Неправильный синтаксис запроса.

?     401 — Unauthorized. Клиент пытается получить защищенный паролем документ. Необходимо иметь заголовок www-Authenticate.

?     403 — Forbidden. Ресурс недоступен вне зависимости от аутентификации.

?     404 — Not Found. Ресурс не существует.

?     405 — Method Not Allowed. Метод (get, post, head, delete, put, trace и т. п.) не разрешен в применении к данному ресурсу.

?     406 — Not Acceptable. Ресурс создает тип mime, который не совместим с теми, что использует клиент (в заголовке Accept).

?     407 — Proxy Authentication Required. Подобен 401, но прокси-сервер должен возвращать заголовок Proxy-Authenticate.

?     408 — Request Timeout. Клиент слишком долго посылает запрос.

?     409 — Conflict. Как правило, связано с запросами put, например, при закачке неподдерживаемых типов файлов.

?     410 — Gone. Документ потерян, адрес переадресовки неизвестен. Отличается от 404 тем, что документ потерян навсегда.

?     411 — Length Required. Сервер не сможет обработать запрос, если клиент не пошлет заголовок Content-Length.

?     412 — Precondition Failed. Условие, необходимое и заданное в заголовке, не выполнено.

?     413 — Request Entity Too Large. Запрошенный документ оказывается большим, чем может быть обработан сервером. Если сервер полагает, что запрос может быть обработан позже, то он возвращает заголовок

Retry-After header.

?       414 — Request URI Too Long. Адрес URI слишком длинный.

?       415 — Unsupported Media Type. Неизвестный формат в запросе.

?       416 — Requested Range Not Satisfiable. Клиент использует невыполнимый заголовок Range.

?       417 — Expectation Failed. Значение в заголовке Expect не выполнено.

?       500 — Internal Server Error. Внутренняя ошибка сервера.

?        501 — Not Implemented. Сервер не поддерживает необходимые для выполнения запроса функции.

?        502 — Bad Gateway. Используется сервером, работающим в качестве прокси-сервера. Показывает, что сервер получил неверный ответ от удаленного сервера.

?        503 — Service Unavailable. Сервер не может ответить в силу состояния технического обслуживания или перегрузки.

?        504 — Gateway Timeout. Используется шлюзом или прокси-сервером. Показывает, что исходный сервер не получил ответа за установленное время.

?       505 — HTTP Version Not Supported. Неподдерживаемая версия HTTP.

Далее приводится пример (листинг 4.10), в котором используются строки состояния с кодами 302 и 404. Код 302 задается при помощи метода sendRedirect, а КОД 404 устанавливается методом sendError.

j Листинг 4.10. Файл SearchEngines.java

package paket; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; impo rt j ava.net.*;

public class SearchEngines extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { String searchString =

URLEncoder.encode(request.getParameter("searchString")); String numResults =

request.getParameter("numResults"); String searchEngine =

request.getParameter("searchEngine");

SearchSpec[] commonSpecs = SearchSpec.getCommonSpecs (); for(int i=0; iccommonSpecs.length; i++) { SearchSpec searchSpec = commonSpecs[i]; if (searchSpec.getName().equals(searchEngine)) { String url =

response.encodeURL(searchSpec.makeURL(searchString,

numResults));

response.sendRedirect(url); return;

}

}

response.sendError(response.SC_NOT_FOUND,

"No recognized search engine specified.");

public void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { doGet(request, response);

Класс SearchSpec описан в следующем файле (листинг 4.11). Листинг 4.11. Файл SearchSpec.java

package paket;

class SearchSpec {

private String name, baseURL, numResultsSuffix; private static SearchSpec[] commonSpecs = { new SearchSpec("google",

"http://www.google.com/search?q=", "&num="), new SearchSpec("infoseek",

"http://infoseek.go.com/Titles?qt=", "&nh="),

new SearchSpec("lycos",

"http://lycospro.lycos.com/cgi-bin/pursuit ?query=", "&maxhits="), new SearchSpec("hotbot",

"http://www.hotbot.com/?MT=",

"&DC=")

};

public SearchSpec(String name,

String baseURL, String numResultsSuffix) { this.name = name; this.baseURL = baseURL;

this.numResultsSuffix = numResultsSuffix;

public String makeURL(String searchString, String numResults) { return(baseURL + searchString + numResultsSuffix + numResults);

public String getNameO { return(name);

public static SearchSpec[] getCommonSpecs() { return(commonSpecs);

Фронт-энд описан в HTML-файле (листинг 4.12).

Листинг 4.12. Файл SearchEngines.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>Searching the Web</TITLE> </HEAD>

<BODY BGCOLOR="#FDF5E6">

<H1 ALIGN="CENTER">Searching the Web</Hl> <FORM ACTION="http://locaihost:81/search"> <CENTER>

Search String:

< IN PUT TYPE="TEXT" NAME="searchString"XBR> Results to Show Per Page: <INPUT TYPE="TEXT" NAME="numResults"

VALUE=10 SIZE=3><BR> <INPUT TYPE="RADIO" NAME="searchEngine" VALUE="google">

Google |

<INPUT TYPE="RADIO" NAME="searchEngine" VALUE="infoseek">

Infoseek |

<INPUT TYPE="RADIO" NAME="searchEngine" VALUE="lycos">

Lycos |

<INPUT TYPE="RADIO" NAME="searchEngine" VALUE="hotbot">

HotBot <BR>

<INPUT TYPE="SUBMIT" VALUE="Search"> </CENTER> </FORM> </BODY> </HTML>

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

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