3. ● Protocolo de propósito general
● Originalmente diseñado para hypermedia (HTML)
● Modelo cliente-servidor
● Stateless (no se guarda el estado)
● Conexiones persistentes (HTTP 1.1)
● API muy simple (métodos HTTP)
Principales características
4. Protocolo de propósito general
HTTP fue originalmente diseñado para transmitir
sólo documentos HTML. Posteriormente se
amplió a otros tipos de datos (Internet media
types, antes conocido como MIME types).
5. Cliente-servidor
El cliente (navegador web, app del móvil, etc)
siempre es el que inicia la comunicación
enviando una petición HTTP (HTTP request) al
servidor. Éste procesa la petición, genera una
respuesta y la envía al cliente mediante una
respuesta HTTP (HTTP response).
7. Petición (request)
Una petición es un mensaje que transmite el
cliente al servidor con el propósito de acceder
a un recurso alojado en éste. Un recurso es
cualquier pieza de información que pueda ser
identificada con una URI (URL o URN). Los
recursos no tienen porqué identificar sólo
datos almacenados en el servidor. Un recurso
puede ser un concepto.
9. Estructura de un mensaje HTTP
Tanto las peticiones como las respuestas tienen
una estructura similar:
● Línea de estado
● Encabezados
● Opcionalmente, el cuerpo del mensaje (datos)
10. Estructura de un petición HTTP
La línea de estado contiene:
● El método HTTP usado (GET)
● La URI del recurso (/)
● La versión del protocolo (HTTP 1.1)
En HTTP 1.1 es obligatorio incluir siempre la
cabecera Host.
GET / HTTP 1.1
Host: www.example.com
Accept: text/html
11. Estructura de un respuesta HTTP
La línea de estado contiene:
● La versión del protocolo (HTTP 1.1)
● El código de respuesta (200)
● Descripción del código (OK)
El resto serían cabeceras y el cuerpo.
HTTP/1.1 200 OK
Date: Mon, 08 Dec 2014 19:04:39 GMT
Content-Type: text/html
12. Stateless
Una de las características más importantes de
HTTP es que todas las peticiones (requests) son
independientes: no se guardan datos (estado) entre
una petición y otra, es decir, el servidor debe tratar
cada petición de forma independiente. Es una de las
claves para poder escalar la arquitectura de la red
hasta el tamaño de Internet.
13. Conexiones persistentes
HTTP es un protocolo de aplicación que requiere
un protocolo de transporte para transmitir los
datos. El protocolo de transporte (TCP, SPDY, etc)
es el encargado de gestionar cada conexión: abrir
conexión, transmitir datos, cerrar conexión.
El coste de abrir una nueva conexión es muy alto,
tanto para el cliente como para el servidor.
14. Conexiones persistentes
Gracias a las conexiones persistentes, característica
añadida en la versión 1.1 de HTTP (versión actual), el
cliente y el servidor pueden realizar varias peticiones
HTTP reutilizando la misma conexión proporcionada
por el protocolo de transporte. Aunque la conexión
sólo se mantiene abierta por un tiempo limitado
cuando deja de haber actividad.
15. Conexiones persistentes
Aunque las conexiones persistentes
permiten minimizar el número de
conexiones requeridas, actualmente los
navegadores pueden abrir de media hasta 6
conexiones simultáneas por host. El
problema es que también existe un límite
para el número total de conexiones
simultáneas a lo largo de todos los hosts.
La cifra varía mucho de un navegador a
otro, pero se mueve entre 10 y 17.
16. Conexiones persistentes
Conclusión: minimizar el número de conexiones
totales tratando de reutilizar las conexiones ya
abiertas (conexiones persistentes) y aprovechando
la caché del navegador. ¡La conexión más rápida es
aquella no efectuada!
17. ● GET: Obtener un recurso.
● POST: Crear un recurso.
● PUT: Actualizar o crear un recurso (si no existía).
● DELETE: Eliminar un recurso.
● OPTIONS: Información del servidor.
● HEAD: Igual que GET, pero sólo obtiene cabeceras.
Métodos HTTP
Con ellos el cliente indica al servidor qué tipo de acción
quiere realizar. Los más usados son:
18. curl -v www.example.com
cur -v -X HEAD www.example.com
curl -v -X OPTIONS www.example.com
Métodos HTTP
Veamos algunos ejemplos con cURL:
19. ● 1xx Informational: Información provisional.
● 2xx Success: La acción se realizó correctamente.
● 3xx Redirection: El cliente debe realizar otra acción.
● 4xx Client Error: Error en la petición del cliente.
● 5xx Server Error: Error del servidor al procesar la petición.
Status codes
Los códigos de respuesta se pueden dividir en 5
categorías: