Introducción al Error CORS
Uno de los dolores de cabeza más comunes para los desarrolladores web full-stack es encontrarse con el bloqueo de la política CORS (Cross-Origin Resource Sharing) en la consola del navegador. Este mecanismo de seguridad de los navegadores web impide que una aplicación web que se ejecuta en un origen (dominio, protocolo o puerto) realice solicitudes a un servidor situado en un origen diferente, a menos que el servidor explícitamente lo permita mediante cabeceras HTTP específicas.
Causas Principales del Error CORS
El error CORS ocurre principalmente debido a las políticas de seguridad del mismo origen implementadas en los navegadores modernos. Las causas más frecuentes incluyen:
- Intentar conectar un frontend alojado en
http://localhost:3000con una API enhttp://localhost:5000sin habilitar los permisos necesarios. - Falta de las cabeceras HTTP correctas como
Access-Control-Allow-Originen la respuesta del servidor. - Realizar peticiones con credenciales (como cookies o tokens de autorización) sin la configuración adecuada en el cliente y el servidor.
Método 1: Solucionar CORS en una Aplicación Node.js usando Express
Si estás desarrollando una API backend utilizando Node.js y Express, la forma más sencilla y recomendada de solucionar este problema es utilizando el paquete oficial cors.
- Instala el paquete en tu proyecto ejecutando el siguiente comando en tu terminal:
npm install cors - Importa y configura el middleware en tu archivo principal de servidor (por ejemplo,
app.jsoserver.js):const express = require('express');const cors = require('cors');const app = express();app.use(cors()); - Si deseas restringir el acceso únicamente a tu dominio de producción, puedes configurar el origen específico de la siguiente manera:
const corsOptions = { origin: 'https://tu-sitio-web.com' };app.use(cors(corsOptions)); - Reinicia tu servidor backend y verifica que las peticiones desde el frontend funcionen correctamente.
Método 2: Configurar Cabeceras HTTP Manualmente sin Librerías
Si no deseas instalar librerías de terceros en tu servidor Node.js u otro entorno de backend, puedes agregar manualmente los encabezados HTTP necesarios en cada respuesta que envíe tu servidor.
app.use((req, res, next) => {res.header('Access-Control-Allow-Origin', '*');res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');next();});- Asegúrate de manejar correctamente las peticiones pre-vuelo (método
OPTIONS) que envían los navegadores antes de realizar solicitudes complejas comoPOSToPUT.