clase:daw:daw:2eval:tema09
Diferencias
Muestra las diferencias entre dos versiones de la página.
| — | clase:daw:daw:2eval:tema09 [2025/11/03 11:37] (actual) – creado - editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | ====== 9. El protocolo HTTP ====== | ||
| + | El protocolo HTTP se usa para enviar y recibir datos en la Web. | ||
| + | Mas información: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | ===== Características ===== | ||
| + | |||
| + | * Sencillo: Es en modo texto y sacil de usar directamente por una persona. | ||
| + | * Extensible: Se pueden enviar mas metadatos que los que estan por defecto. Ej: Nº de página | ||
| + | * Sin estado: Cada petición es independiente. Eso es un problema en sitios como por ejemplo un carrito de la compra. | ||
| + | |||
| + | ===== Ventajas ===== | ||
| + | |||
| + | * Cache: Mejora la velocidad al controlar la cache de las páginas | ||
| + | * Autenticación: | ||
| + | * Proxys: Permite de forma transparente usar proxies | ||
| + | * Sesiones: Gracias a las cookies podemos mantener el estado entre peticiones. | ||
| + | * Formatos: Permite indicar el formato de lo que se envía, de lo que se pide y de lo que se retorna. | ||
| + | |||
| + | |||
| + | ===== Formato ===== | ||
| + | El formato lo vamos a explicar sobre un ejemplo. | ||
| + | |||
| + | Una petición HTTP tiene la siguiente forma: | ||
| + | GET /index.html HTTP/1.1 | ||
| + | Host: www.fpmislata.com | ||
| + | Accept-Language: | ||
| + | |||
| + | La respuesta del servidor es: | ||
| + | |||
| + | HTTP/1.1 200 OK | ||
| + | Content-Length: | ||
| + | Content-Type: | ||
| + | | ||
| + | < | ||
| + | |||
| + | |||
| + | Vamos ahora a explicar la petición | ||
| + | |||
| + | * '' | ||
| + | * ''/ | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Es decir que en una petición HTTP hay una primera línea y luego varias líneas con las cabeceras. | ||
| + | |||
| + | Pasemos ahora a explicar la respuesta: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * ''< | ||
| + | |||
| + | |||
| + | |||
| + | ===== Cabeceras HTTP ===== | ||
| + | Existen muchas cabeceras HTTP, podemos ver un listado en [[https:// | ||
| + | |||
| + | Las cabeceras se dividen entre las que se envían en la petición y las que se retorna en la respuesta. | ||
| + | |||
| + | ==== Petición ==== | ||
| + | Cabeceras que se pueden enviar en la petición | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | ==== Respuesta ==== | ||
| + | Cabeceras que se pueden enviar en la respuesta | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | < | ||
| + | * La cabecera '' | ||
| + | * Por otro lado notar que '' | ||
| + | </ | ||
| + | |||
| + | ===== Estados HTTP ===== | ||
| + | Es estado es lo que indica si una petición HTTP ha tenido éxito o no. Sus principales valores son: | ||
| + | |||
| + | * 200-299: La petición ha tenido éxito | ||
| + | * 300-399: Redirección de los datos. | ||
| + | * 400-499: Los datos que ha enviado el cliente no son correctos | ||
| + | * 500-599: Se ha producido un error en el servidor. | ||
| + | |||
| + | Mas información en [[https:// | ||
| + | |||
| + | De entre todos los código están algunos que solemos ver a menudo: | ||
| + | * 200: Todo ha ido bien | ||
| + | * 201: Se ha creado el recurso (Suele ser en un INSERT) | ||
| + | * 204: La petición no retorna datos. (Suele ser en un DELETE) | ||
| + | * 400: Los datos que ha enviado el cliente no son correctos | ||
| + | * 401: Hay que estar logueado | ||
| + | * 403: El usuario está logueado pero tiene Prohibido el acceso al documento | ||
| + | * 404: No encuentra el documento | ||
| + | * 500: Error del servidor | ||
| + | |||
| + | {{: | ||
| + | ===== Métodos ===== | ||
| + | Los métodos ( o verbos) HTTP indican que acción queremos hacer con los datos. Al navegar normalmente se usa siempre el '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Así por ejemplo si enviamos; | ||
| + | |||
| + | GET /index.html HTTP/1.1 | ||
| + | Host: www.fpmislata.com | ||
| + | Accept-Language: | ||
| + | |||
| + | Obtendremos el fichero '' | ||
| + | |||
| + | DELETE /index.html HTTP/1.1 | ||
| + | Host: www.fpmislata.com | ||
| + | Accept-Language: | ||
| + | |||
| + | El servidor **borrará** el fichero '' | ||
| + | |||
| + | | ||
| + | ===== REST ===== | ||
| + | Podríamos decir que REST es usar toda la potencia de HTTP en nuestras propias aplicaciones. Suele usar Por forma general el formato usado en los datos es [[https:// | ||
| + | |||
| + | |||
| + | ==== Las operaciones a realizar ==== | ||
| + | Vamos a ver 4 método HTTP que coinciden con los 4 métodos de un CRUD o con operaciones de SQL | ||
| + | |||
| + | ^ Método HTTP ^ Descripción ^ Metodo CRUD ^ Metodo SQL ^ | ||
| + | | GET | Este método HTTP lo usaremos para cuando queremos leer datos del servidor | Read | SELECT | | ||
| + | | POST | Este método HTTP lo usaremos para añadir datos al servidor | Create | INSERT | | ||
| + | | PUT | Este método HTTP lo usaremos para actualizar ((realmente es actualizar o insertar pero en este curso por simplificar, | ||
| + | | DELETE | Este método HTTP lo usaremos para borrar datos del servidor | Delete | DELETE | | ||
| + | |||
| + | |||
| + | |||
| + | ==== La Estructura de la URL ==== | ||
| + | Veamos la estructura de la URL de las peticiones en un supuesto ejemplo de una base de datos de usuarios. | ||
| + | |||
| + | ^ Descripción ^ URL ^ Método HTTP ^ JSON Enviado ^ JSON Retornado ^ | ||
| + | | Obtener un libro | ''/ | ||
| + | | Listado de libros | ''/ | ||
| + | | Añadir un libro | ''/ | ||
| + | | Actualizar un libro | ''/ | ||
| + | | Borrar un libro | ''/ | ||
| + | |||
| + | Donde pone '' | ||
| + | |||
| + | El "JSON Enviado" | ||
| + | |||
| + | El "JSON Retornado" | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Servidor REST en NodeJS ===== | ||
| + | Ahora vamos a ver como modificar nuestro servidor en NodeJS para poder leer y modificar cosas relacionadas con HTTP. | ||
| + | |||
| + | El ejemplo contiene: | ||
| + | * Leer cabeceras | ||
| + | * Aceptar varios métodos | ||
| + | * Retornar varios códigos de estado | ||
| + | * Devolver cabeceras | ||
| + | |||
| + | <sxh javascript> | ||
| + | const express = require(' | ||
| + | const app = express() | ||
| + | const port = 80 | ||
| + | |||
| + | app.get('/', | ||
| + | response.set(' | ||
| + | response.status(200); | ||
| + | |||
| + | if (request.header(' | ||
| + | response.send(" | ||
| + | } else if (request.header(' | ||
| + | response.send(" | ||
| + | } else { | ||
| + | response.send(" | ||
| + | } | ||
| + | |||
| + | | ||
| + | }); | ||
| + | app.post('/', | ||
| + | response.status(200); | ||
| + | response.send(' | ||
| + | }); | ||
| + | app.delete('/', | ||
| + | response.status(200); | ||
| + | response.send(' | ||
| + | }); | ||
| + | app.delete('/ | ||
| + | response.status(200); | ||
| + | response.send(' | ||
| + | }); | ||
| + | app.delete('/ | ||
| + | response.status(404); | ||
| + | response.send(' | ||
| + | }); | ||
| + | |||
| + | app.listen(port, | ||
| + | console.log(`server is listening on ${port}`) | ||
| + | }) | ||
| + | </ | ||
| + | ===== Ejercicios ===== | ||
| + | |||
| + | ==== Ejercicio 1 ==== | ||
| + | Usando el programa [[https:// | ||
| + | |||
| + | Debes conectarte al servidor " | ||
| + | |||
| + | * Envía la petición HTTP sin cabeceras. ¿Porque ha fallado? | ||
| + | * Añade ahora la cabecera '' | ||
| + | * Haz una nueva petición a la URL "/ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Ejercicio 2 ==== | ||
| + | En tu máquina debes instalar lo siguiente: | ||
| + | * Descargar el fichero {{biblioteca-original.json.zip|}} y descomprimelo. Mira el contenido del fichero '' | ||
| + | * Instala el servidor [[https:// | ||
| + | |||
| + | npm install -g json-server | ||
| + | | ||
| + | |||
| + | * Ves al directorio donde está el fichero '' | ||
| + | |||
| + | json-server --watch biblioteca-original.json | ||
| + | |||
| + | * Navega a [[http:// | ||
| + | |||
| + | <sxh json> | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Indica las siguientes | ||
| + | |||
| + | ^ Descripción | ||
| + | | Obtener el libro de "La fundación" | ||
| + | | Borrar el libro de "Yo Robot" | | ||
| + | | Obtener todos los libros | | | | | ||
| + | | Añadir un nuevo género llamado " | ||
| + | |||
| + | |||
| + | ==== Ejercicio 3 ==== | ||
| + | Desde Firefox instala el plugin de [[https:// | ||
| + | |||
| + | Lanza las URL del ejercicio anterior. Si hay datos de entrada los deberás enviar en el campo de " | ||
| + | |||
| + | ==== Ejercicio 4 ==== | ||
| + | Modifica el servidor hecho en NodeJS de forma que: | ||
| + | * En la URL ''/ | ||
| + | * En la URL ''/ | ||
| + | |||
| + | <note tip> | ||
| + | Este ejercicio **no** tiene nada que ver con el ejercicio del JSON Server, se hace todo sobre el código de NodeJS de express. | ||
| + | </ | ||
