Servlets: solicitud HTTP del cliente
Cuando un navegador solicita una página web, envía mucha información al servidor web que no se puede leer directamente porque esta información viaja como parte del encabezado de la solicitud HTTP. Puede consultar el Protocolo HTTP para obtener más información al respecto.
A continuación se muestra la información importante del encabezado que proviene del lado del navegador y que usaría con mucha frecuencia en la programación web:
No Señor. | Encabezado y descripción |
---|---|
1 | Accept Este encabezado especifica los tipos MIME que el navegador u otros clientes pueden manejar. Valores deimage/png o image/jpeg son las dos posibilidades más comunes. |
2 | Accept-Charset Este encabezado especifica los juegos de caracteres que el navegador puede usar para mostrar la información. Por ejemplo ISO-8859-1. |
3 | Accept-Encoding Este encabezado especifica los tipos de codificaciones que el navegador sabe cómo manejar. Valores degzip o compress son las dos posibilidades más comunes. |
4 | Accept-Language Este encabezado especifica los idiomas preferidos del cliente en caso de que el servlet pueda producir resultados en más de un idioma. Por ejemplo, en, en-us, ru, etc. |
5 | Authorization Los clientes utilizan este encabezado para identificarse cuando acceden a páginas web protegidas por contraseña. |
6 | Connection Este encabezado indica si el cliente puede manejar conexiones HTTP persistentes. Las conexiones persistentes permiten al cliente u otro navegador recuperar varios archivos con una sola solicitud. Un valor deKeep-Alive significa que se deben utilizar conexiones persistentes. |
7 | Content-Length Este encabezado es aplicable solo a las solicitudes POST y proporciona el tamaño de los datos POST en bytes. |
8 | Cookie Este encabezado devuelve las cookies a los servidores que las enviaron previamente al navegador. |
9 | Host Este encabezado especifica el host y el puerto como se indica en la URL original. |
10 | If-Modified-Since Este encabezado indica que el cliente desea la página solo si se ha cambiado después de la fecha especificada. El servidor envía un código, 304 que significaNot Modified encabezado si no hay ningún resultado más reciente disponible. |
11 | If-Unmodified-Since Este encabezado es el reverso de If-Modified-Since; especifica que la operación debe tener éxito solo si el documento es anterior a la fecha especificada. |
12 | Referer Este encabezado indica la URL de la página web de referencia. Por ejemplo, si se encuentra en la página web 1 y hace clic en un enlace a la página web 2, la URL de la página web 1 se incluye en el encabezado de referencia cuando el navegador solicita la página web 2. |
13 | User-Agent Este encabezado identifica el navegador u otro cliente que realiza la solicitud y se puede utilizar para devolver contenido diferente a diferentes tipos de navegadores. |
Métodos para leer el encabezado HTTP
Existen los siguientes métodos que se pueden utilizar para leer el encabezado HTTP en su programa de servlet. Estos métodos están disponibles con el objeto HttpServletRequest
No Señor. | Método y descripción |
---|---|
1 | Cookie[] getCookies() Devuelve una matriz que contiene todos los objetos Cookie que el cliente envió con esta solicitud. |
2 | Enumeration getAttributeNames() Devuelve una enumeración que contiene los nombres de los atributos disponibles para esta solicitud. |
3 | Enumeration getHeaderNames() Devuelve una enumeración de todos los nombres de encabezados que contiene esta solicitud. |
4 | Enumeration getParameterNames() Devuelve una enumeración de objetos String que contiene los nombres de los parámetros contenidos en esta solicitud |
5 | HttpSession getSession() Devuelve la sesión actual asociada con esta solicitud, o si la solicitud no tiene una sesión, crea una. |
6 | HttpSession getSession(boolean create) Devuelve la HttpSession actual asociada con esta solicitud o, si no hay una sesión actual y el valor de create es verdadero, devuelve una nueva sesión. |
7 | Locale getLocale() Devuelve la configuración regional preferida en la que el cliente aceptará contenido, según el encabezado Accept-Language. |
8 | Object getAttribute(String name) Devuelve el valor del atributo nombrado como un Objeto, o nulo si no existe ningún atributo del nombre dado. |
9 | ServletInputStream getInputStream() Recupera el cuerpo de la solicitud como datos binarios mediante ServletInputStream. |
10 | String getAuthType() Devuelve el nombre del esquema de autenticación utilizado para proteger el servlet, por ejemplo, "BASIC" o "SSL", o nulo si la JSP no estaba protegida. |
11 | String getCharacterEncoding() Devuelve el nombre de la codificación de caracteres utilizada en el cuerpo de esta solicitud. |
12 | String getContentType() Devuelve el tipo MIME del cuerpo de la solicitud, o nulo si no se conoce el tipo. |
13 | String getContextPath() Devuelve la parte del URI de la solicitud que indica el contexto de la solicitud. |
14 | String getHeader(String name) Devuelve el valor del encabezado de solicitud especificado como una cadena. |
15 | String getMethod() Devuelve el nombre del método HTTP con el que se realizó esta solicitud, por ejemplo, GET, POST o PUT. |
dieciséis | String getParameter(String name) Devuelve el valor de un parámetro de solicitud como una cadena, o nulo si el parámetro no existe. |
17 | String getPathInfo() Devuelve cualquier información de ruta adicional asociada con la URL que el cliente envió cuando realizó esta solicitud. |
18 | String getProtocol() Devuelve el nombre y la versión del protocolo de la solicitud. |
19 | String getQueryString() Devuelve la cadena de consulta contenida en la URL de la solicitud después de la ruta. |
20 | String getRemoteAddr() Devuelve la dirección de Protocolo de Internet (IP) del cliente que envió la solicitud. |
21 | String getRemoteHost() Devuelve el nombre completo del cliente que envió la solicitud. |
22 | String getRemoteUser() Devuelve el inicio de sesión del usuario que realiza esta solicitud, si el usuario ha sido autenticado, o nulo si el usuario no ha sido autenticado. |
23 | String getRequestURI() Devuelve la parte de la URL de esta solicitud desde el nombre del protocolo hasta la cadena de consulta en la primera línea de la solicitud HTTP. |
24 | String getRequestedSessionId() Devuelve el ID de sesión especificado por el cliente. |
25 | String getServletPath() Devuelve la parte de la URL de esta solicitud que llama al JSP. |
26 | String[] getParameterValues(String name) Devuelve una matriz de objetos String que contiene todos los valores que tiene el parámetro de solicitud dado, o nulo si el parámetro no existe. |
27 | boolean isSecure() Devuelve un booleano que indica si esta solicitud se realizó mediante un canal seguro, como HTTPS. |
28 | int getContentLength() Devuelve la longitud, en bytes, del cuerpo de la solicitud y que el flujo de entrada pone a disposición, o -1 si no se conoce la longitud. |
29 | int getIntHeader(String name) Devuelve el valor del encabezado de solicitud especificado como un int. |
30 | int getServerPort() Devuelve el número de puerto en el que se recibió esta solicitud. |
Ejemplo de solicitud de encabezado HTTP
A continuación se muestra el ejemplo que utiliza getHeaderNames()método de HttpServletRequest para leer la información del encabezado HTTP. Este método devuelve una enumeración que contiene la información del encabezado asociada con la solicitud HTTP actual.
Una vez que tenemos una Enumeración, podemos recorrer la Enumeración de la manera estándar, usando el método hasMoreElements () para determinar cuándo parar y usando el método nextElement () para obtener el nombre de cada parámetro.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "HTTP Header Request Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<table width = \"100%\" border = \"1\" align = \"center\">\n" +
"<tr bgcolor = \"#949494\">\n" +
"<th>Header Name</th><th>Header Value(s)</th>\n"+
"</tr>\n"
);
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String paramName = (String)headerNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getHeader(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
out.println("</table>\n</body></html>");
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Ahora, llamar al servlet anterior generaría el siguiente resultado:
HTTP Header Request Example
Header Name
Header Value(s)
accept
*/*
accept-language
en-us
user-agent
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encoding
gzip, deflate
host
localhost:8080
connection
Keep-Alive
cache-control
no-cache