El protocolo HTTP es uno de los protocolos más importantes de la capa de Aplicación del modelo OSI . El uso principal de este protocolo es para enviar información de hipertexto del cliente al servidor y del servidor al cliente para comunicarse en la World Wide Web. Pero, el protocolo HTTP es un protocolo sin estado, lo que significa que este protocolo no puede mantener las requests anteriores de ningún cliente en particular al servidor. Significa que tenemos que autorizar repetidamente las requests para avanzar a la página siguiente en una aplicación web.
¿Cómo superamos este problema?
¿Qué es una galleta?
Una cookie en términos más simples es solo información textual sobre algún sitio web. Cuando visita un sitio web en particular, cierta información se guarda en su sistema local para que cuando visite el mismo sitio web nuevamente, este sitio web pueda reconocerlo y mostrarle los resultados de acuerdo con sus preferencias. Las cookies se han utilizado durante mucho tiempo en la historia de Internet.
Ejemplo: cuando visita un sitio web, en realidad solicita la página web del servidor. Para un servidor, cada solicitud es una solicitud única. Entonces, si visita cien veces, el servidor considerará que todas y cada una de las requests son únicas. Dado que la intensidad de las requests que llegan a un servidor es alta, es obvio y lógico no almacenar toda la información del usuario en el servidor. ¿Qué pasa si nunca vuelves a visitar este sitio web? Esta información sería redundante. Entonces, para recordarlo de manera única, el servidor envía las cookies junto con la respuesta que se guarda en su máquina local. Ahora, la próxima vez que acceda al mismo servidor, obtendrá una respuesta de acuerdo con sus preferencias, ya que el servidor lo reconocerá.
Esta cookie es única para cada servidor (actualmente existen algunas excepciones debido a los anuncios). Por lo tanto, es posible que tenga muchas cookies en su sistema, pero un servidor reconocerá su propia cookie y podrá analizarla por usted.
Cookies HTTP: el uso de cookies HTTP es una de las soluciones simples al problema. Hay tantos tipos de cookies que se utilizan para una comunicación fluida entre el servidor y el cliente. La cookie más utilizada es una cookie de sesión.
Cookies de sesión: estas cookies se almacenan en la memoria temporal y son válidas hasta la sesión particular hasta que el usuario navega en un sitio web en particular, luego el navegador también nos permite elegir si queremos almacenar estas cookies o no. Las cookies de sesión se utilizan principalmente en sitios web de comercio electrónico para rastrear nuestra lista de pedidos de artículos sin cookies de sesión, nuestro carrito de compras siempre estará vacío después de navegar por una nueva página de un sitio web de comercio electrónico en particular. Es por eso que se utilizan diferentes cookies HTTP durante la navegación en Internet para rastrear nuestras requests anteriores.
¿Cómo envía y recibe cookies Node.js ?
Express.js Framework usa middleware para que muchas requests se puedan manejar fácilmente. De manera similar, Express.js admite la función de analizar las requests entrantes mediante middleware. Cuando un nuevo cliente realiza una solicitud de autorización después de completar con éxito las credenciales, se envía al cliente un encabezado de respuesta que contiene cookies firmadas que contiene toda la información en el formato firmado y se genera una cookie para la sesión particular en el lado del cliente.
Cuando el cliente realiza una solicitud por segunda vez, la solicitud contiene una cookie firmada que tiene toda la información de solicitud aceptada anteriormente de esa sesión. El servidor Node.js analiza esta cookie firmada utilizando la clave firmada y verifica si la cookie está presente para esta sesión o no. Si existe, acepta las requests entrantes; de lo contrario, rechaza todas las requests entrantes.
Cookie firmada:
usuario=s%3Aadmin.MCnksbOc3nP5tXVflBq94MPEzyEd6yXYTwl9kT1as%2B0; Ruta=/; Dominio=localhost;
Instalación de módulos: instale el módulo express y el analizador de cookies con el siguiente comando:
npm install express.js npm install cookie-parser
Estructura del proyecto: Tendrá el siguiente aspecto:
Nombre de archivo: index.js
Javascript
// Importing express module const express = require("express"); // Importing cookie-parser module var cookieParser = require('cookie-parser'); // Importing filesystem module const fs = require("fs"); var path = require('path'); // Initialisation express server const app = express(); // Parsing the signed cookies app.use(cookieParser('1234567890GFG')); function auth(req, res, next) { console.log(req.signedCookies.user) // Checking request containing signed // cookies or not if (!req.signedCookies.user) { // Asking for authorization var authHeader = req.headers.authorization; if (!authHeader) { var err = new Error('You are not authenticated!'); res.setHeader('WWW-Authenticate', 'Basic'); err.status = 401; return next(err) } // Checking the credintials var auth = new Buffer.from(authHeader.split(' ')[1], 'base64').toString().split(':'); // Username and Password var user = auth[0]; var pass = auth[1]; if (user == 'admin' && pass == 'password') { // Sending the set-cookie header to the client side res.cookie("user", "admin", { signed: true }) // Authorized next(); } else { // Reject the authorization var err = new Error('You are not authenticated!'); res.setHeader('WWW-Authenticate', 'Basic'); err.status = 401; return next(err); } } else { // Checking whether the signed cookie exist or not if (req.signedCookies.user === "admin") { // Allowing for handling incoming request next() } // Rejects all the incoming requests. else { var err = new Error('You are not authenticated!'); err.status = 401; return next(err); } } } // Handling authorization app.use(auth); app.use(express.static(path.join(__dirname, 'public'))); // Listening the server app.listen((3000), () => { console.log("Server is Running "); })
Ejecute el archivo index.js con el siguiente comando:
node index.js
- Abra cualquier navegador con la ubicación http://localhost:3000 en una ventana privada (para evitar una contraseña y un nombre de usuario guardados). Se producirá un pop cerca de la barra de direcciones. Complete el nombre de usuario y la contraseña que se mencionan en el código.
- Si el nombre de usuario y la contraseña ingresados coinciden con la condición, la ubicación de mención index.html se mostrará en el navegador como se muestra a continuación:
Encabezado de respuesta por el servidor:
Cookies generadas en el lado del cliente:
Publicación traducida automáticamente
Artículo escrito por zack_aayush y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA