HTTP
En este post vamos a conocer el protocolo http y las peticiones que se puede hacer por medio de peticiones y respuestas.
HTTP (HyperText Transfer Protocol) es el protocolo de comunicación que permite la transferencia de información en la web entre un cliente (por ejemplo, un navegador) y un servidor. Este protocolo define cómo se estructuran las peticiones y respuestas para intercambiar datos, siendo la base de casi todas las interacciones en la web.
¿Qué es HTTP?
HTTP es un protocolo de la capa de aplicación en el modelo OSI que se basa en un modelo de cliente-servidor.
Cliente: Un navegador o una aplicación que realiza peticiones HTTP a un servidor. Por ejemplo, cuando ingresas una URL en el navegador, el cliente envía una solicitud HTTP al servidor.
Servidor: El servidor recibe la solicitud del cliente, procesa la petición (por ejemplo, busca el archivo o los datos solicitados) y devuelve una respuesta HTTP.
Petición-Respuesta: HTTP sigue un ciclo sencillo:
- El cliente envía una solicitud al servidor (con un método como GET o POST).
- El servidor procesa esa solicitud y responde con datos, que pueden ser una página web, un archivo JSON, una imagen, etc.
Diferenciar entre HTTP y HTTPS
La diferencia principal entre HTTP y HTTPS radica en la seguridad de la comunicación entre el cliente y el servidor.
HTTP | HTTPS | |
---|---|---|
Definición | HTTP es un protocolo de comunicación sin cifrado, utilizado para la transferencia de datos en la web. | HTTPS es la versión segura de HTTP. Utiliza un protocolo de seguridad llamado SSL/TLS (Secure Sockets Layer / Transport Layer Security) para cifrar los datos que se transfieren entre el cliente y el servidor. |
Seguridad | Los datos transmitidos mediante HTTP no están cifrados, lo que significa que cualquier información intercambiada entre el cliente (navegador) y el servidor puede ser vista por terceros si se intercepta la conexión. |
Los datos transmitidos mediante HTTPS están cifrados, lo que significa que aunque se intercepten, no pueden ser leídos fácilmente por terceros. Esto protege información confidencial como contraseñas, detalles de tarjetas de crédito y cualquier tipo de datos sensibles. HTTPS requiere un certificado SSL/TLS instalado en el servidor, que valida la identidad del sitio web y habilita la encriptación. |
Uso comùn | HTTP es adecuado para sitios web públicos que no manejan información confidencial, como blogs o sitios informativos. | Se utiliza principalmente en sitios que manejan datos confidenciales, como tiendas en línea, bancos, redes sociales o cualquier servicio que implique la transmisión de información personal. |
Puerto | Utiliza el puerto 80 para la comunicación. | Utiliza el puerto 443 para la comunicación. |
Ejemplo | http://www.ejemplo.com | https://www.ejemplo.com |
Solicitud o de HTTP
Una solicitud HTTP es un mensaje enviado por el cliente (generalmente un navegador web o una aplicación) al servidor, pidiendo que realice una acción específica, como entregar un recurso (una página web, un archivo, etc.) o enviar datos a un servidor.
Anatomía de una solicitud HTTP
Una solicitud HTTP tiene una estructura bien definida con cuatro componentes principales:
Línea de solicitud (Request Line)
La primera línea de la solicitud especifica el método HTTP, el URI (Uniform Resource Identifier) y la versión del protocolo HTTP.
#METODO URI VERSIÓN_DEL_PROTOCOLO
GET /pagina-ejemplo HTTP/1.1
- Metodo: define la acción a realizar sobre el recurso solicitado, ejemplo
GET
: Solicita la obtención de un recurso sin modificarlo.POST
: Envía datos al servidor, típicamente para crear o actualizar un recurso.PUT
: Sube o reemplaza completamente un recurso.DELETE
: Elimina un recurso.- Otros métodos:
HEAD
,PATCH
,OPTIONS
,CONNECT
, etc.
- URI: Es la ruta que identifica el recurso solicitado en el servidor. Es parte de la URL pero no incluye el dominio.
- VERSIÓN_DEL_PROTOCOLO: Es la versión de HTTP que está utilizando el cliente, Por ejemplo,
HTTP/1.1
oHTTP/2
Cabeceras (Headers)
Las cabeceras HTTP proporcionan información adicional sobre la solicitud o el cliente. Cada cabecera es una línea que sigue el formato nombre: valor
.
Host: www.ejemplo.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
Cabeceras comunes:
- Host: Especifica el dominio del servidor (obligatorio en HTTP/1.1).
- User-Agent: Informa sobre el navegador o cliente que hace la solicitud.
- Accept: Define qué tipo de contenido puede aceptar el cliente (HTML, JSON, XML, etc.).
- Content-Type: Especifica el tipo de contenido del cuerpo de la solicitud (por ejemplo,
application/json
). - Authorization: Se usa para enviar credenciales de autenticación.
- Referer: Indica la URL de la que proviene la solicitud.
Cuerpo de la Solicitud (Request Body)
No todas las solicitudes HTTP tienen un cuerpo. El cuerpo de la solicitud se utiliza para enviar datos al servidor, especialmente en métodos como POST
, PUT
y PATCH
.
El cuerpo es la parte de la solicitud donde se envían los datos (formulario, JSON, archivos, etc.).
POST /api/usuarios HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/json
Content-Length: 46
{
"nombre": "Juan",
"correo": "juan@ejemplo.com"
}
Línea en blanco (Separador)
Una línea en blanco se coloca entre las cabeceras y el cuerpo de la solicitud para separarlos.
Anatomía de una respuesta HTTP
Una respuesta HTTP es el mensaje que envía un servidor al cliente (por ejemplo, un navegador web) tras recibir y procesar una solicitud HTTP. La respuesta contiene el estado de la solicitud, las cabeceras que describen la respuesta, y el cuerpo con el contenido solicitado o un mensaje de error.
Línea de estado (Status Line)
La primera línea de una respuesta HTTP indica el estado de la solicitud y tiene el siguiente formato:
#VERSIÓN_DEL_PROTOCOLO CÓDIGO_DE_ESTADO FRASE_DE_ESTADO
HTTP/1.1 200 OK
-
VERSIÓN_DEL_PROTOCOLO: Especifica la versión de HTTP utilizada por el servidor (como
HTTP/1.1
oHTTP/2
). -
CÓDIGO_DE_ESTADO: Es un código numérico que indica el resultado de la solicitud. Los códigos de estado HTTP están organizados en cinco clases:
- 1xx (Informativo): La solicitud ha sido recibida y el proceso continúa.
- 2xx (Éxito): La solicitud fue recibida y procesada correctamente.
200 OK
: Solicitud exitosa, el recurso solicitado está en el cuerpo de la respuesta.201 Created
: Recurso creado exitosamente (generalmente en respuestas a solicitudes POST o PUT).
- 3xx (Redirección): El cliente debe realizar una acción adicional para completar la solicitud.
301 Moved Permanently
: El recurso ha sido movido permanentemente a una nueva URL.302 Found
: Redirección temporal.
- 4xx (Errores del cliente): La solicitud tiene algún problema o el cliente ha cometido un error.
400 Bad Request
: Solicitud mal formulada.401 Unauthorized
: Se requiere autenticación.404 Not Found
: El recurso solicitado no se encontró.
- 5xx (Errores del servidor): El servidor ha encontrado un problema mientras procesaba la solicitud.
500 Internal Server Error
: Error genérico en el servidor.503 Service Unavailable
: El servidor no está disponible temporalmente (generalmente por mantenimiento).
-
FRASE_DE_ESTADO: Es una descripción corta y textual del código de estado. Ejemplos:
OK
,Not Found
,Internal Server Error
.
Cabeceras de respuesta (Response Headers)
Las cabeceras en una respuesta HTTP proporcionan información adicional sobre la respuesta y el servidor. Cada cabecera sigue el formato nombre: valor
.
Content-Type: text/html; charset=UTF-8
Content-Length: 3495
Server: Apache/2.4.29 (Ubuntu)
Cabeceras comunes:
- Content-Type: Indica el tipo de contenido del cuerpo de la respuesta, como
text/html
,application/json
,image/png
, etc. - Content-Length: Especifica el tamaño del cuerpo de la respuesta en bytes.
- Date: Indica la fecha y hora en que se generó la respuesta.
- Cache-Control: Controla cómo se cachea la respuesta. Ejemplo:
Cache-Control: no-cache
. - Set-Cookie: Permite al servidor enviar una cookie al cliente.
- Location: Usada en respuestas de redirección (códigos 3xx) para indicar la nueva ubicación del recurso.
- Server: Proporciona información sobre el software del servidor (por ejemplo,
Server: Apache/2.4.29
).
Cuerpo de la respuesta (Response Body)
El cuerpo de la respuesta HTTP contiene los datos solicitados o un mensaje de error. Dependiendo del tipo de respuesta, puede ser una página HTML, un archivo JSON, una imagen, un archivo descargable, entre otros.
El tipo de contenido (HTML, JSON, XML, etc.) que se envía en el cuerpo de la respuesta está definido en la cabecera Content-Type
.
Otros ejemplos de contenido en el cuerpo:
- JSON (generalmente usado en APIs):
- Imagen (en caso de enviar un archivo de imagen):
- El cuerpo contendría los datos binarios de la imagen, y el
Content-Type
sería algo comoimage/jpeg
.
- El cuerpo contendría los datos binarios de la imagen, y el
Ejemplo completo de una respuesta HTTP
HTTP/1.1 200 OK
Date: Mon, 23 Sep 2024 10:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 3495
Server: Apache/2.4.29 (Ubuntu)
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Página de ejemplo</title>
</head>
<body>
<h1>Bienvenido a la página de ejemplo</h1>
<p>Esta es una página de prueba generada por el servidor.</p>
</body>
</html>