1. ¿Qué es el protocolo HTTP?
HTTP es la abreviatura del protocolo de transferencia de hipertexto. Es un protocolo de capa de aplicación del protocolo TCP/IP, que se utiliza para definir el proceso de intercambio de datos entre el navegador web y el servidor web. Después de que el cliente se conecta al servidor web, si desea obtener un determinado recurso web en el servidor web, debe cumplir con un determinado formato de comunicación. El protocolo HTTP se utiliza para definir el formato para que el cliente se comunique con el servidor web.
2. Versión del protocolo HTTP
Versión del protocolo HTTP: HTTP/1.0, HTTP/1.1
3. La diferencia entre http1.0 y http1.1
En el protocolo HTTP 1.0, después de que el cliente establece una conexión con el servidor web, solo se puede obtener un recurso web.
En el protocolo HTTP 1.1, después de que el cliente establece una conexión con el servidor web, se obtienen múltiples recursos web en una conexión.
4. Solicitud HTTP
4.1. Contenido incluido en las solicitudes HTTP
Después de que el cliente se conecta al servidor, solicita un cierto recurso web desde el servidor, que se llama el cliente que envía una solicitud HTTP al servidor.
Una solicitud HTTP completa incluye el siguiente contenido: una línea de solicitud, varios encabezados de mensajes y un ejemplo de contenido de entidad:
4.2. Detalles de las solicitudes HTTP - Línea de solicitud
El Get in the Soly Line se llama Método de solicitud. Los métodos de solicitud incluyen: publicar, obtener, cabeza, opciones, eliminar, rastrear, poner, y los usados comúnmente incluyen: obtener, publicar
Si el usuario no tiene configuración, de forma predeterminada, el navegador envía solicitudes para obtener las solicitudes al servidor. Por ejemplo, el acceso se ingresa directamente en el navegador, el acceso se hace clic en Hyperlink, etc., etc. son todos. Si el usuario desea cambiar el método de solicitud para publicar, puede cambiar el método de envío del formulario.
Si Post o Get se utiliza para solicitar un recurso web desde el servidor. La diferencia entre estos dos métodos se refleja principalmente en la transmisión de datos: si se obtiene el método de solicitud, los datos entregados al servidor pueden traerse en forma de A? Después de la dirección de URL solicitada, y se separan múltiples datos por y, por ejemplo: get /mail/1.html?name=abc&password=xyz http/1.1
Características del método GET: Los parámetros adjuntos a la dirección de URL son limitadas, y la capacidad de datos generalmente no puede exceder 1K.
Si el método de solicitud es publicación, los datos se pueden enviar al servidor en el contenido de entidad solicitado. Las características del método post son: la cantidad de datos transmitidos es ilimitado.
4.3. Detalles de las solicitudes HTTP - Encabezado de mensajes
Encabezados de mensajes comunes en las solicitudes HTTP
Aceptar: el navegador le indica al servidor a través de este encabezado y el tipo de datos que admite. Aceptar-Charset: el navegador le dice al servidor a través de este encabezado, qué caracteres establece que admite. Aceptación de aceptación: el navegador le indica al servidor a través de este encabezado, y el formato de compresión compatible Aceptar el idioma: el navegador le dice al servidor a través de este encabezado y su host local: el navegador le dice al servidor a través de este encabezado y a qué host acceder. Si modificó a Since: el navegador le dice al servidor a través de este encabezado y el tiempo para almacenar en caché los datos. Referente: El navegador le indica al servidor a través de este encabezado y de qué página es el cliente. Conexión: el navegador le indica al servidor a través de este encabezado y si debe desconectar el enlace o el enlace después de que se complete la solicitud.
Por ejemplo:
Aceptar: Aplicación/Aplicación X-MS, Image/JPEG, Aplicación/XAML+XML, Image/GIF, Image/PJPEG,
Aplicación/X-MS-XBAP, Aplicación/VND.MS-Excel, Application/VND.MS-PowerPoint, Application/MSWord, */ *
Referente: http: // localhost: 8080/javawebdemoproject/web/2.jsp
Aceptar el idioma: ZH-CN
Agente de usuario: Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .net4.0c; .net4.0e; infopath.3)
Aceptación de aceptación: GZIP, desinflar
Anfitrión: Localhost: 8080
Conexión: mantener alive
5. Respuesta HTTP
5.1. Contenido incluido en la respuesta http
Una respuesta HTTP representa los datos enviados por el servidor al cliente, que incluye: una línea de estado, varios encabezados de mensajes y contenido de entidad.
ejemplo:
Http/1.1 200 okserver: apache-coyote/1.1content-type: text/html; charset = ISO-8859-1Content-Length: 105Date: Tue, 27 de mayo de 2014 16:23:28 GMT <HTML> <HEAD> <Título> Hola World JSP </title> </Head> <Body> ¡Hello World! </body> </html>
5.2. Detalles de la respuesta HTTP - Línea de estado
Formato de línea de estado: Número de versión HTTP Código de estado Razón Declaración <CRLF>
Ejemplo: http/1.1 200 ok
El código de estado se utiliza para representar el resultado de procesamiento del servidor de la solicitud. Es un número decimal de tres dígitos. Los códigos de estado de respuesta se dividen en 5 categorías, como se muestra a continuación:
5.3. Detalles de respuesta HTTP: encabezados de respuesta de uso común
Encabezados de respuesta común (encabezados de mensajes) en respuestas HTTP
Ubicación: el servidor usa este encabezado para decirle al navegador dónde saltar al servidor: el servidor usa este encabezado para decirle al navegador el modelo del contenido del servidor: la codificación de contenido: el servidor usa este encabezado para decirle al navegador el formato de compresión de la longitud de contenido de datos: el servidor usa este encabezado para decir el navegador de la longitud de los datos que se devuelve el contenido: el servidor usa este encabezado para decir el salador de los datos el salador de la sala de obtener el plano de la ubicación que es el browser a lo que le devuelve el plano de los datos que se devuelve el plano de los datos que el horario de los datos Tipo de contenido: el servidor usa este encabezado para decirle al navegador el tipo de datos que se devolverán la actualización: el servidor usa este encabezado para decirle al navegador que actualice la disco de contenido: el servidor usa este encabezado para decirle al navegador que escriba datos en una manera descargada transferencia de transferencia: el servidor usa este encabezado para decirle al navegador que le dice el navegador que el navegador se devuelve en los bloqueos de los bloqueos: 1 Control de transferencia: 1 Controle a los cajas para que el navegador no sea el navegador para que el navegador sea el navegador para que los datos se devuelvan en los bloqueos: 1 Control de la transferencia. Cache-Control: no cache
Pragma: no cache
6. Establezca encabezados de respuesta en el servidor para controlar el comportamiento del navegador del cliente
6.1. Establezca el encabezado de respuesta de ubicación para realizar la redirección de solicitudes
paquete gacl.http.study; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.htpservletResponses GACL * */public class ServletDemO01 extiende httpservlet {public void doget (httpservletRequest solicitud, httpservletResponse respuesta) lanza ServletException, ioException {Response.setStatus (302); // Establecer el código de respuesta del servidor/** *establece el encabezado de respuesta y el encabezado del servidor utiliza el cabezal de la ubicación para decir el browser. Esta es la llamada redirección de solicitud*/respuesta.setheader ("ubicación", "/Javaweb_httpprotocol_study_20140528/1.jsp"); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {this.doget (solicitud, respuesta); }}Cuando usa la dirección de URL "http: // localhost: 8080/javaweb_httpprotocol_study_20140528/servlet/servletdemo01" a Access ServletDemo01, puede ver la información del encabezado del código de estado y la respuesta enviada al navegador después del servidor responde, como se muestra en la figura a continuación:
El servidor devuelve un código de estado 302 para decirle al navegador que no tengo los recursos que desea, pero le digo dónde está a través del encabezado de respuesta de ubicación. Después de que el navegador analiza el encabezado de respuesta, sabe que quiere saltar a la página /Javaweb_httpProtocol_study_20140528/1.jsp, por lo que saltará automáticamente a 1.jsp, como se muestra en la figura a continuación:
6.2. Establezca el encabezado de respuesta de codificación de contenido para decirle al navegador el formato de compresión de los datos
paquete gacl.http.study; import java.io.bytearrayoutputstream; import java.io.ioexception; import java.util.zip.gzipoutputstream; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import; javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse;/***@author gacl*Este applet se utiliza para demostrar los siguientes dos pequeños puntos de conocimiento*1. Use la transmisión GzipoutputStream para comprimir datos*2. Establezca la codificación de contenido del encabezado de respuesta para decirle al navegador que el formato comprimido de los datos enviados por el servidor*/public class ServletDemo02 extiende httpservlet {public void doget (httpservletRequest, respuesta httpservletreponse) lanza servletException, ioexception {data de cadena = datos = datos = datos = datos = datos = datos = datos = datos = datos = datos = Datos = datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos = Datos de cadena = "ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcc dabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcda bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdd "CDABCDABCDABCDABCDABCDABCDABCDABC" + "DABCDABCDABCDABCDABCDABCDABCDABC" + "DABCDABCDABCDABCDABCDABCDABCDABCDAB) "CDABCDABCDABCDABCDABCDABCDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABCDABCDABCD"; System.out.println ("原始数据的大小为 :" + data.getBytes (). Longitud); BytearRayOutputStream Bout = new ByteArRaReOutputStream (); Gzipoutputstream gout = new GzipoutputStream (Bout); // buffer gout.write (data.getBytes ()); gout.close (); // Obtener los datos comprimidos byte g [] = bout.tobytearray (); Respuesta.Setheader ("codificación de contenido", "gzip"); respuesta.setheader ("contenido-longitud", g.length +""); respuesta.getOutputStream (). Write (g); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {this.doget (solicitud, respuesta); }}La información de respuesta enviada por el servidor al navegador es la siguiente:
Los formatos de compresión soportados por el navegador son:
6.3. Establezca el encabezado de respuesta de tipo de contenido y especifique el tipo de datos de loopback
paquete gacl.http.study; import java.io.ioException; import java.io.inputstream; import java.io.outputstream; import javax.servlet.servletException; import javax.servlet.http.httttpservlet; import javax.servlet.http.httpservletRequest; javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; public class ServletDemo03 extiende httpservlet {public void doget (httpservletRequest solicitud, httpservletResponse Respuesta) que responde ServletException, iOexception { /** ** ** ** data tystings tystings tystings, tystings tystings, tystings tystone tystings tyment tymet tymet tyspole, tymet tymet tymet thats typesquest, tyspoly, tyspoly tyspoly that typese {tyspoly* El navegador puede recibir (aceptar) son: * Application/X-MS-Application, * Image/JPeg, * Application/Xaml+XML, * Image/Gif, * Image/Pjpeg, * Application/X-MS-XBap, * Application/Vnd.ms-Excel, * Application/Vnd.Ms-Powerpoint, * Aplicación/Msword, */Response.Sheader ("" "", "" "," "," "," "," ". "Image/jpeg"); // use el encabezado de respuesta de tipo de contenido para especificar el tipo de datos enviado al navegador como "Image/jpeg" // Lea la imagen WP_20131005_002.jpg en la carpeta IMG ubicada en el directorio raíz del proyecto, y devuelve un flujo de entrada de entrada InputStream in = = = this.getServletContext (). GetResourceASStream ("/img/wp_20131005_002.jpg"); byte buffer [] = nuevo byte [1024]; int len = 0; OutputStream out = Response.getOutputStream (); // Obtenga la transmisión de salida while ((len = in.read (buffer))> 0) {// Lea los contenidos en la transmisión de entrada (in) y almacene los en el buffer (buffer) out.write (buffer, 0, len); // emitir los contenidos en el búfer en el avicultura}}}}}} void doPost (htpStpStpsost (HTTpStpStpStpStpStpStpStpSEtpSEtpSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTSETTET HttpServletResponse Respuesta) lanza ServletException, ioException {this.doget (solicitud, respuesta); }}La información de respuesta enviada por el servidor al navegador es la siguiente:
Los resultados en ejecución de ServletDemo03 se muestran en la figura a continuación:
Las imágenes se muestran en el navegador
6.4. Establezca el encabezado de respuesta de actualización para actualizar el navegador regularmente
paquete gacl.http.study; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.htpservletResponses extiende httpservlet {public void doget (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception { / ** * Establezca el encabezado de respuesta de actualización para permitir que el navegador se actualice regularmente cada 3 segundos * / // respuesta. /** * Establezca el encabezado de respuesta de actualización para dejar que el navegador salte a http://www.baidu.com en 3 segundos */respuesta.setheader ("actualizar", "3; url = 'http: //www.baidu.com'"); respuesta.getWriter (). Write ("GaCl"); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {this.doget (solicitud, respuesta); }} 6.5. Establezca el encabezado de respuesta a la disco de contenido para que el navegador descargue el archivo
paquete gacl.http.study; import java.io.ioException; import java.io.inputstream; import java.io.outputstream; import javax.servlet.servletException; import javax.servlet.http.httttpservlet; import javax.servlet.http.httpservletRequest; javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; public class ServletDemo05 extiende httpservlet {public void doget (httpservletRequest solicitud, httpservletResponse) lanza servletexception, iOexception { / /doget {the Content the Content Soly, httpServletResponse) lanza ServletException, iOexception { /** Content the Content The Content Soly, HttpSePonse Response) que d. encabezado para dejar que el navegador descargue el archivo */ respuesta.setheader ("contenido-disposición", "adjunto; filename = xxx.jpg"); InputStream in = this.getServletContext (). GetResourceasStream ("/img/1.jpg"); byte buffer [] = nuevo byte [1024]; int len = 0; OutputStream out = Response.getOutputStream (); while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); }} public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {this.doget (solicitud, respuesta); }}Al acceder a ServletDemO05 en el navegador, aparecerá el cuadro de descarga del archivo, como se muestra en la siguiente figura:
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.