Главная » Java, Web » HTTP-заголовки

0

Когда HTTP-клиент (браузер) посылает запрос по протоколу HTTP, то первой строкой посылается заголовок. Клиент может послать несколько заголовков. Почти все из них не являются обязательными, за исключением заголовка content-Length, который используется в том случае, если тип запроса post. Перечислим некоторые наиболее часто употребляемые заголовки.

?       Accept — MIME-типы, понятные браузеру.

?       Accept-charset — наборы символов, понятные браузеру.

?       Accept-Encoding — тип кодировки (gzip и т. п.).

?       Accept-Language — ЯЗЫК.

?       Authorization — информация по аутентификации.

?      Connection — используются ли персистентные соединения. Если сервлет получает значение Keep-Alive, то могут быть использованы персистентные соединения. Это полезно при создании такого ответа, который может содержать заранее неизвестное количество компонентов (рисунков или апплетов). При этом сервер должен будет послать заголовок Content-Length. Также удобно пользоваться ByteArrayOutputStream.

?      Con tent-Length — длина ответа (размер приложения) для метода post.

?      cookie — для работы с cookies.

?       From — для адресов e-mail, не используется в браузерах.

?      Host — хост и порт.

?       if-Modified-since — возвращать документы, более новые, чем указанный срок.

?       Pragma — не использовать кэш. Сервер должен возвращать только обновленный документ, даже если прокси-сервер содержит локальную копию запрашиваемого документа.

?      Referer — откуда произошло обращение к данной странице.

?      user-Agent — тип пользовательского агента, тип браузера.

?      ua-Pixeis, ua-coior, ua-os, ua-cpu — нестандартные заголовки для задания размеров экрана, глубины отображаемых цветов, типа процессора.

Чтение заголовка — очень простой процесс. Вызывается метод getHeader HttpServletRequest, который возвращает string или null. Существуют и другие методы, в том числе метод getcookies, а также методы

getAuthType, getRemoteUser, getDateHeader, getlntHeader. Метод getMethod возвращает основной метод запроса, то есть один из get или post, а также head, put, delete. Метод getRequestURi возвращает URI. Метод getRequestProtocoi возвращает протокол, например "НТТР/1.0" или "НТТР/1.1".

Ниже приведен пример, в котором сервлет читает все заголовки (листинг 4.8). Сервлет создает таблицу, в которую выводит прочитанную информацию. Он также выводит три компонента строки запроса (метод, URI и строку с названием протокола).

Листинг 4.8. Файл ShowRequestHeader.java

package paket; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*;

public class ShowRequestHeaders extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter() ;

String title = "Servlet Example: Showing Request Headers"; out.println(ServletUtilities.headWithTitle(title) + "<BODY BGCOLOR=\"#EDE5E6\">\n" + "<H1 ALIGN=CENTER>" + title + "</Hl>\n" + "<B>Request Method: </B>" + request.getMethod() + "<BR>\n" + "<B>Request URI: </B>" + request.getRequestURI() + "<BR>\n" + "<B>Request Protocol: </B>" + request.getProtocol() + "<BR><BR>\n" + "CTABLE B0RDER=1 ALIGN=CENTER>\n" + "<TR BGCOLOR=\"#EEADO0\">\n" + "<TH>Header Name<TH>Header Value"); Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) {

String headerName = (String)headerNames.nextElement(); out. println ("<TRXTD>" + headerName);

out.printIn(" <TD>" + request.getHeader(headerName));

}

out. println ("</TABLE>\n</BODYX/HTML>") ;

}

public void doPost(HttpServletRequest request,

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

}

}

Изменения, вносимые в файл конфигурации Web-cepeepa, следующие:

servlet.name: showheaders

servlet.showheaders.className: paket.ShowRequestHeqders

servlet.showheaders.url: /showheaders

Рис. 4.10. Ответ сервлета на запрос браузера Opera

 

Рис. 4.11. Ответ сервлета на запрос браузера IE6

Ответ, получаемый от сервлета, выглядит так, как показано на рис. 4.10 и рис. 4.11 (для двух типов браузеров).

Далее будет рассмотрено, как можно обращаться к значениям, посылаемым в HTML-форме.

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

По теме:

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