1 Módulo HTTP¶
Protocolo HTTP¶
HTTP (HyperText Transfer Protocol, es decir, Protocolo de transferencia de hipertexto) permite la transferencia de datos entre un servidor web y un receptor, que normalmente suele ser un navegador web.
Recuerda Estructura de una URL
La estructura de una URL es la siguiente: http://host[:puerto][/ruta][?parámetros], donde:
- http indica el protocolo que utilizamos para conectarnos a un servidor web.
- host es el nombre de dominio (por ejemplo google.com)
- puerto es un número de puerto donde el servidor escuchara las peticiones. Por lo general, no se suele indicar ya que por defecto suele ser 80, en caso de ser otro sí habría que indicarlo.
- /ruta indica donde se encuentra el archivo en el servidor.
- ?parámetros son los datos que se pueden enviar desde el cliente para una mayor identificación del recurso que solicitamos.
La comunicación http sucede cuando el usuario realiza un petición desde el navegador, por ejemplo buscar un producto en una tienda online. Esta petición se enviará al servidor web que realizará las operaciones pertinentes para obtener un resultado. Dicho resultado, se mostrará al usuario a través del navegador con unos códigos de estado e información relevante, por ejemplo el resultado de que todo ha ido correcto además del producto buscado, o el resultado de que ha habido un error junto con un mensaje indicativo.
https
El protocolo https es el protocolo http pero haciendo uso del certificado de seguridad.
La petición del usuario lleva consigo cierta información, que será tramitada en el servidor, como por ejemplo:
- url: ruta que ha usado el usuario para realizar la petición.
- cabeceras (headers): dan información de la petición, como por el ejemplo, el tipo dato que se va a enviar en la petición (texto, html, json, etc), el user-agent, es decir, desde que tipo de dispositivo se está haciendo la petición (navegador Chrome, Móvil, etc)
- cuerpo (body): es la información que se manda con la petición. A veces simplemente se realiza una petición sin necesidad de mandar ningún tipo de información.
La respuesta que devuelve el servidor contiene los mismos parámetros que la petición pero en este caso, además contiene un código de estado (status code) que representa como ha ido la operación, si ha sido éxito, o ha habido un error por parte del cliente, o por parte del servidor, etc.
Servidor web con Node JS¶
Una de los proyectos que podemos realizar con Node JS es crear un servidor web haciendo uso del protocolo http, para ello Node JS dispone de un módulo para ello.
El módulo http
permite realizar solicitudes http haciendo uso del patrón emisor, es decir, recibirá peticiones que resolverá emitiendo una respuesta.
Para crear el servidor hacemos uso del método createServer(request, response)
que recibe dos parámetros la petición del usuario (request) y la respuesta que devolverá el servidor (response). Devuelve un objeto de tipo Server
.
Una vez creado el objeto Server
será necesario indicar en que puerto debe estar escuchando para recibir peticiones. Para ello, se dispone del método listen(port, callback)
, siendo port el puerto ha escuchar y siendo callback la función que realizará cuando escuche.
¡Cuidado!
Se lanzará un error si se intenta escuchar un puerto que ya está escuchando para otro servidor
const http = require('node:http')
const server = http.createServer((request, response) => {
response.write("Hello world!")
response.end()
})
server.listen(3000, () => console.log("Escuchando en el puerto 3000..."))
Request vs Response¶
Http Request
y Http Response
son dos conceptos importantes en el mundo del desarrollo de servidores web. Request es la petición que el usuario realiza a través del navegador web. Dicha petición va a ser tratada en el servidor, y éste a su vez mandará una respuesta al usuario. Dicha respuesta es lo que se conoce como response
Request¶
La estructura de un request es la siguiente:
- El método en el que se realiza la petición (POST, GET, etc).
- La ruta al fichero al que se realiza la petición (/content/login)
- Encabezados, donde se indica diferentes aspectos de la petición, como por ejemplo el lenguaje, el tipo de dato con el que se va a realizar la petición (XML, HTML, JSON, etc).
- El cuerpo de la petición, que aunque es opcional, la información que manda el usuario al realizar la petición. Dicha información o data tiene que estar escrita de la forma indicada en la cabecera (XML, HTML, JSON, etc)
Response¶
En un response podemos encontrar:
- status code es el código del estado de la resolución de la petición (200, si está todo correcto, 400 si algún error etc.)
- Encabezados, que al igual que en el request describen el contenido.
- El cuerpo del mensaje, que al igual que el request, es el tipo de dato devuelto por el usuario.
Métodos para peticiones y respuesta¶
En Node JS se dispone de varios métodos para tratar con la petición requerida por el usuario:
getHeaders()
: obtiene un array con los headers.getHeader(name)
: obtiene el valor de una de las propiedades (name) de la cabecera.hasHeader(name)
: comprueba si la cabecera contiene la propiedad indicada.path
: devuelve la ruta de la petición.method
: devuelve el método en el que se ha realizado la petición.host
: devuelve el host donde se ha realizado la petición.writeHead(statusCode, statusMessage, headers)
: escribe la cabecera de la respuesta, teniendo en cuenta el código de estado y como parámetros voluntarios el mensaje y los headers.write()
: escribe lo que se debe devolver. Puede recibir el dato a devolver, así como su codificación, además de un callback.end()
: es el método usado para finalizar la respuesta y devolverla al usuario. Puede tener tres parámetros opcionales:- data: la información a devolver. Si se utiliza es similar al método write.
- encoding: la codificación de los datos devueltos.
- callback: la función que se realizará cuando finalice la respuesta.