CodeGym /Blog Java /Random-ES /Parte 3. HTTP/HTTPS
John Squirrels
Nivel 41
San Francisco

Parte 3. HTTP/HTTPS

Publicado en el grupo Random-ES
Este material forma parte de la serie "Introducción al desarrollo empresarial". Artículos anteriores: Parte 3. HTTP/HTTPS - 1¡Hola! Hoy aprenderemos sobre los protocolos HTTP y HTTPS. Pero primero, aclaremos un punto: estamos hablando de protocolos para enviar datos a través de una red a nivel de aplicación del modelo OSI. Puede recordar que conocimos el modelo OSI en uno de los artículos anteriores. Si no lo recuerdas, aquí está .

¿Qué es un protocolo de comunicación de datos?

Esto es lo que llamamos el conjunto de reglas acordadas que permiten a los desarrolladores de diferentes servicios enviar información en un formato que otros pueden entender. Por ejemplo, puede utilizar Google Chrome para obtener información tanto de Facebook como de Twitter, ya que los desarrolladores la envían mediante el protocolo HTTP estándar, que permite que su navegador la procese. Las reglas uniformes son muy convenientes para la gente que desarrolla la parte del servidor: hay muchas bibliotecas que pueden convertir información por usted y enviarla usando el protocolo apropiado. HTTP se concibió inicialmente como un protocolo para enviar páginas HTML. Esa es la forma en que se usó durante mucho tiempo, pero ahora los programadores a menudo lo usan para enviar cadenas y archivos multimedia. En general, este protocolo es universalmente aceptado y versátil, y es muy fácil de usar. Y ahora vamos a investigar cómo usarlo.

La estructura de HTTP

Debemos notar de inmediato que el protocolo HTTP consiste solo en texto. Lo que más nos interesa es la estructura de este texto. Cada mensaje consta de tres partes:
  1. Línea de inicio: define algunos datos de mantenimiento.
  2. Encabezados: describen los parámetros del mensaje.
  3. Cuerpo — Este es el contenido del mensaje. El cuerpo debe estar separado de los encabezados por una línea vacía.
El protocolo HTTP se utiliza para enviar solicitudes a un servidor y recibir respuestas del servidor. Los parámetros de solicitudes y respuestas son ligeramente diferentes.

Así es como se ve una solicitud HTTP simple:


GET / HTTP/1.1
Host: codegym.cc
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
La línea de salida indica:
  • GET — El método de la solicitud
  • / — La ruta de la solicitud
  • HTTP/1.1 — La versión del protocolo
Luego vienen los encabezados:
  • Host : el host al que se dirige la solicitud
  • Agente de usuario : el cliente que envía la solicitud.
Falta el cuerpo del mensaje. En una solicitud HTTP, solo se requieren la línea de inicio y el encabezado "Host". Ahora veamos todo paso a paso. Una solicitud HTTP debe contener algún método. Hay nueve de ellos: GET, POST, PUT, OPTIONS, HEAD, PATCH, DELETE, TRACE, CONNECT. Los más comunes son GET y POST. Estos dos métodos serán suficientes al principio. GET : este método solicita contenido del servidor. En consecuencia, las solicitudes con el método GET no tienen cuerpo de mensaje. Pero si lo necesita, puede pasar parámetros a través de la ruta (en la línea de inicio) en el siguiente formato:

https://cdn.codegym.cc/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2
donde codegym.cc es el host, /send es la ruta de la solicitud y ? es un separador que indica que siguen los parámetros de consulta. Al final, se enumeran los pares clave-valor ("clave=valor"), separados por un ampersand. POST : este método publica información en el servidor. Una solicitud POST puede enviar varios tipos de información: parámetros como pares "clave=valor", JSON, código HTML o incluso archivos. Toda la información se envía en el cuerpo del mensaje. Por ejemplo:

POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: codegym.cc

{
  "Id": 12345,
  "User": "John"
}
La solicitud se envía a codegym.cc/user/create/json y la versión del protocolo es HTTP/1.1. "Aceptar" indica el formato de respuesta que el cliente espera recibir. "Tipo de contenido" indica el formato del cuerpo del mensaje enviado en la solicitud. "Content-Length" es el número de caracteres en el cuerpo. Una solicitud HTTP puede contener muchos encabezados diferentes. Para obtener más información, consulte la especificación del protocolo .

Respuestas HTTP

Después de recibir una solicitud, el servidor la procesa y envía una respuesta al cliente:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98

<html>
  <head>
    <title>An Example Page</title>
  </head>
  <body>
    <p>Hello World</p>
  </body>
</html>
La línea de inicio de la respuesta contiene la versión del protocolo (HTTP/1.1), el código de estado (200) y la descripción del estado (OK). Sus encabezados incluyen el tipo y la longitud del contenido. El cuerpo de la respuesta contiene código HTML que el navegador representa como una página HTML.

Códigos de estado de respuesta

Todo está claro con respecto al cuerpo del mensaje y los encabezados, pero debemos decir algunas palabras sobre los códigos de estado. Los códigos de estado de respuesta son siempre de tres dígitos. El primer dígito del código indica la categoría de la respuesta:
  • 1xx — Informativo. La solicitud fue recibida. El servidor está listo para continuar.
  • 2xx — Exitoso. La solicitud fue recibida, entendida y procesada.
  • 3xx — Redirección. Se deben realizar acciones adicionales para procesar la solicitud.
  • 4xx: error del cliente. La solicitud contiene errores o no cumple con el protocolo.
  • 5xx — Error del servidor. La solicitud se redactó correctamente, pero el servidor no pudo procesarla.
El segundo y tercer dígito del código indican una respuesta más específica. Por ejemplo:
  • 200 OK: la solicitud se recibió y se procesó correctamente.
  • 201 Creado: la solicitud se recibió y se procesó correctamente, lo que resultó en la creación de un nuevo recurso o instancia.
  • 301 Movido permanentemente: el recurso solicitado se movió permanentemente. Las solicitudes posteriores deben realizarse utilizando la nueva dirección.
  • Redirección temporal 307: el recurso se ha movido temporalmente. Por ahora, se puede acceder mediante el reenvío automático.
  • 403 Prohibido — Se entendió la solicitud, pero se requiere autorización.
  • 404 No encontrado: el servidor no encontró el recurso en esta dirección.
  • 501 No implementado: el servidor no admite la funcionalidad requerida para responder a la solicitud.
  • 505 Versión HTTP no admitida: el servidor no es compatible con la versión especificada del protocolo HTTP.
Además del código de estado de la respuesta, también se envía una descripción del estado. Esto ayuda a aclarar qué significa cada estado específico. El protocolo HTTP es muy práctico: proporciona una gran cantidad de encabezados, que puede usar para organizar una comunicación muy flexible entre un cliente y un servidor. Una consideración completa de todos los encabezados de solicitud y respuesta, métodos de solicitud y códigos de estado de respuesta sería demasiado para un solo artículo. Si lo necesita, puede leer la especificación oficial del protocolo, que describe todos los matices. Es costumbre usar el protocolo HTTP en el puerto 80, por lo que cuando vea una URL que termina en el puerto 80, puede estar seguro de que necesita usar HTTP para acceder a ella. A medida que la tecnología evolucionó y comenzaron a enviarse datos personales a través de Internet, se hizo necesario pensar en cómo brindar protección adicional a la información que el cliente envía al servidor. El resultado de este pensamiento fue el protocolo HTTPS.

La diferencia entre HTTPS y HTTP

En términos de sintaxis, HTTPS es idéntico al protocolo HTTP. Es decir, utiliza las mismas líneas de inicio y encabezados. Las únicas diferencias son el cifrado adicional y el puerto predeterminado (443) . HTTPS se cifra entre HTTP y TCP, es decir, entre las capas de aplicación y transporte. Si olvidó lo que eso significa, consulte el artículo sobre el modelo OSI . El estándar de cifrado actual es TLS. No profundizaremos mucho en este tema, pero recuerde que el cifrado ocurre antes de que la información llegue a la capa de transporte.. En HTTPS, absolutamente toda la información está encriptada, excepto el host y el puerto donde se envía la solicitud. Cambiar un servidor para usar el protocolo HTTPS en lugar de HTTP no requiere el uso para cambiar el código del servidor. Esta característica está habilitada en los contenedores de servlets, de lo que hablaremos en artículos posteriores. Y eso es todo por hoy. En realidad, espera un momento. Para obtener algunas solicitudes HTTP, abra Google Chrome, presione F12 y seleccione la pestaña "Red". Todas las solicitudes y respuestas enviadas/recibidas por su navegador se mostrarán aquí. Parte 4. Los conceptos básicos de Maven Parte 5. Servlets y la API de Java Servlet. Escribiendo una aplicación web simple Parte 6. Contenedores de Servlet Parte 7. Introducción al patrón MVC (Modelo-Vista-Controlador)
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION