Red de conocimiento informático - Material del sitio web - ¿Cómo modificar el formato de datos de la solicitud http?

¿Cómo modificar el formato de datos de la solicitud http?

Formato de datos de solicitud de cliente HTTP

Los programas servlet se comunican principalmente con los clientes del navegador a través del protocolo HTTP, lo que requiere que los programadores tengan un conocimiento profundo de las funciones básicas del programa y las operaciones específicas del protocolo HTTP. estudiar.

Al escribir servlets y Jsp, hay dos puntos que vale la pena señalar: uno es estar familiarizado con el proceso de operación y el formato de datos del protocolo HTTP, y el otro es aplicar de manera flexible los métodos relevantes en el servlet. API.

Procesa datos relevantes de forma correcta y eficiente.

1. Descripción del formato de datos de la solicitud del cliente HTTP

La solicitud HTTP incluye tres partes: línea de solicitud (línea de solicitud), encabezado y cuerpo de datos. La línea de solicitud consta del método de solicitud, la URL de solicitud, la URI de solicitud y el protocolo.

(Protocolo), mientras que el encabezado de la solicitud contiene múltiples atributos y el cuerpo de los datos puede considerarse como un archivo de texto o binario adjunto a la solicitud.

El siguiente ejemplo muestra el contenido del encabezado de una solicitud HTTP, que en realidad se transmite desde el navegador IE al servidor Tomcat a través del protocolo HTTP de red.

GET /icwork/? Buscar = producto HTTP/1.1

Acepta: imagen/gif, imagen/x-xbitmap, imagen/jpeg, imagen/pjpeg, aplicación/vnd.ms-powerpoint, aplicación/vnd.ms-excel, aplicación /msword,*. *

Idiomas aceptados: inglés de EE. UU.

Codificaciones aceptadas: gzip, deflate

Agente de usuario: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0DigExt)

Moderador:

Recomendado por:

Conexión: Mantener activo

Este programa utiliza seis encabezados, algunos encabezados no aparecen. Nos referimos a este ejemplo para explicar el formato de solicitud HTTP en detalle.

1. Línea de solicitud HTTP: el formato de la línea de solicitud es el método del protocolo URI de solicitud. En el ejemplo anterior, provoca GET /icwork/? search = p ruduct http/1.1 es la línea de solicitud.

2. Aceptación: se refiere al formato de archivo MIME al que pueden acceder los navegadores u otros clientes. El servlet puede determinar y devolver el formato de archivo apropiado en función de él.

3.Accept-Charset: Indica la codificación de caracteres aceptable para el navegador. El valor predeterminado para los navegadores en inglés es ISO-8859-1.

4.Accept-Language: Indica el tipo de idioma que el navegador puede aceptar, como en o en-us, que hace referencia al inglés.

5.Accept-Encoding: Indica el método de codificación aceptable para el navegador. El método de codificación es diferente del formato de archivo. Se utiliza para comprimir archivos y acelerar la transferencia de archivos. Una vez que el navegador recibe la respuesta web, la decodifica y luego verifica el formato del archivo.

6. Autorización: se utiliza para identificar el navegador cuando se utiliza el mecanismo de contraseña.

7.Cache-Control: Establece opciones relacionadas con las solicitudes de almacenamiento del servidor proxy. Normalmente no se utilizan servlets.

8. Conexión: Se utiliza para indicarle al servidor si puede mantener una conexión HTTP fija. HTTP/1.1 utiliza Keep-Alive como valor predeterminado, de modo que cuando el navegador requiere varios archivos (como un archivo HTML y archivos gráficos relacionados), no necesita establecer una conexión cada vez.

9.Content-Type: el tipo de contenido utilizado para las solicitudes de nombres de tablas. Puede obtenerlo utilizando el método getContentType() de HttpServletRequest.

10.Cookie: El navegador utiliza este atributo para enviar Cookie al servidor. Una cookie es un pequeño conjunto de datos registrado en el navegador, que puede registrar información del usuario relacionada con el servidor y también puede utilizarse para implementar funciones de sesión.

11. Expectativa: Indica el estado de respuesta esperado del cliente.

12.De: Da la dirección de correo electrónico del responsable de la solicitud HTTP del cliente.

13. Host: nombre del sitio web y número de puerto en la URL correspondiente.

14.If-Match: utilizado por el método PUT.

15.If-Modified-Since: El cliente utiliza este atributo para indicar que solo requiere páginas que hayan cambiado después de la fecha especificada. Debido a que el navegador puede usar sus archivos almacenados sin tener que solicitarlos al servidor, esto ahorra recursos web. Dado que el servlet es una página web generada dinámicamente, normalmente no es necesario utilizar este atributo.

16.If-None-Match: El método PUT utiliza la operación opuesta a If-Match.

17.If-Unmodified-Since: Lo opuesto a If-Match-Since.

18.Pragma: Este atributo tiene un solo valor, pragma: no-cache, lo que significa que si el servlet actúa como un servidor proxy, la solicitud debe pasarse al servidor de destino incluso si tiene almacenado la página web.

19. Autorización de proxy: el servidor proxy usa este atributo, pero el Servlet generalmente no lo usa.

20. Alcance: Si el cliente tiene algunas páginas web, este atributo puede solicitar el resto.

21.Referer: Indica la URL de la página web que generó la solicitud. Haga clic en el enlace de la página web/icconcept/index.jsp a la página web/icwork.

/search, en la solicitud GET/icwork/search enviada al servidor, el referente es

/icconcept/index.jsp. Este atributo se puede utilizar para rastrear qué sitio web está. proviene la solicitud web.

22.Actualización: los clientes pueden utilizar diferentes protocolos desde HTTP/1.1 a través de esta configuración de atributo.

23. Agente de Usuario: Es el nombre del navegador del cliente.

24.Vía: Se utiliza para registrar el servidor proxy o canal web por el que pasan las solicitudes web.

25. Advertencia: Utilizado por el cliente para declarar errores de entrega o almacenamiento en caché.

Suplemento. Codificación de transferencia:

Cuando la longitud del estilo del periódico no se puede determinar de antemano, no es posible incluir un campo de longitud del contenido en el encabezado para indicar la longitud del estilo del periódico. En este momento, la longitud del estilo del periódico debe determinarse mediante el campo Codificación de transferencia.

Generalmente, el valor del campo Transfer-Encoding debe estar fragmentado, lo que indica que la codificación fragmentada se utiliza para transferir el estilo del periódico. La codificación fragmentada es un método de codificación definido en el RFC HTTP/1.1, por lo que todas las aplicaciones HTTP/1.1 deberían admitir este método.

El método básico de codificación de fragmentos es dividir un bloque de datos grande en varios bloques pequeños, cada uno de los cuales puede especificar su propia longitud.

2. El siguiente es un servlet (tomcat analiza y muestra la información del encabezado de la solicitud del cliente (probado en tomcat):

Código Java

Código:

Importar javax.servlet.*;

Importar javax.servlet.http.*;

Importar Java.io.*;

Importar Java . util . enumeración;

La información del encabezado de clase pública extiende HttpServlet{

public void doPost(requisito de solicitud de servlet http, respuesta HttpServletResponse)

Lanza ServletException, IOException

{

/*

enumeración e = req . getheadernames();

while(e . hasmorelements()){

String s =(String)e . nextelement();

system out . println(" encabezado: " s " " req. obtener encabezado(s)

p>

}

e = req . getattributenames();

while(e . hasmorelements()){

Cadena s =(Cadena) e . nextelement();

system out . println(" atributo: " s " " req . obtener atributo(s)); p>

e = req . getparameternames();

mientras(e . hasmorelements()){

Cadena s =(Cadena)e . p>

system . out . println(" parámetro: " s " " req . getparameter(s));

}*/

resp . text/html; charset = GBK ");

PrintWriter out = resp . getwriter();

out . println(" lt; html gt lthead gt lttitle gtFormParameterServlet lt/title gt ; lt/head > ;);

out . println(" lt; body bgcolor = \ " white \ " gt);

out . println(" lt; center gt ltfont color = \ " # 009999 \ " size = \ " 4 \ " face = \ " Arial \ " gt;

out . calle

rong >;);

salida . println(" lt;/font gt; lt/center >);

salida . println(" lt; HR >;");

out . println(" lt; H3 gt; La línea de solicitud es: lt/H3 >);

out . println(" lt; b gt método: lt/b gt; req .get método() "lt;br>;);

out .println("lt;b gtURI:lt;/b gt;req .getrequesturi() "lt;br>;);

salida . println(" lt; b gt protocolo lt/b gt; req . get protocolo() " lt; br >;

salida . center gt lth3 gt nombre y valor del título lt/H3 gt; lt/center >);

out . out .println("lt;tr bgcolor = '#99cee6' gt ltth gt namelt/th gt;ltth gt valuelt/th gt; lt/tr>);

nombres de encabezado de enumeración = req. get encabezado nombres();

mientras(nombres de encabezado. hasmoreelements()){

Nombre de encabezado de cadena =(Cadena)nombres de encabezado siguienteelemento();

fuera. println(" lt; tr gt ltTD > nombre del encabezado " lt;/TD gt; ltTD > req . get encabezado(nombre del encabezado) " lt;/TD gt; lt/tr >);

}

salida . println(" lt;/table gt; lt/body gt; lt/html >);

salida . flush();

}

DoGet anulado público (solicitud de solicitud de servlet http, respuesta HttpServletResponse)

Lanza ServletException, IOException

{

doPost(solicitud, respuesta );

}

}