Introducción al Error CORS en JavaScript
Uno de los dolores de cabeza más comunes para los desarrolladores web al consumir APIs es el famoso error CORS (Cross-Origin Resource Sharing). Este mecanismo de seguridad implementado por los navegadores bloquea las peticiones HTTP realizadas desde un dominio (origen) diferente al que sirve la API, protegiendo así los datos de los usuarios contra ataques maliciosos.
¿Cuáles son las Causas Principales del Error CORS?
El error CORS ocurre principalmente por las siguientes razones técnicas:
- El servidor backend no incluye las cabeceras HTTP necesarias (como
Access-Control-Allow-Origin). - Estás intentando realizar una petición AJAX desde un entorno de desarrollo local (ej.
http://localhost:3000) a un servidor de producción sin la configuración adecuada. - El tipo de petición utiliza métodos no seguros o cabeceras personalizadas que requieren una verificación previa mediante el método
OPTIONS(preflight request).
Método 1: Configurar Cabeceras CORS en el Servidor (Node.js / Express)
La forma más limpia y definitiva de solucionar este problema es configurando tu servidor backend para que permita solicitudes desde tu origen frontend. Si utilizas Express en Node.js, puedes usar el paquete oficial cors.
- Instala el paquete ejecutando el siguiente comando en tu terminal:
npm install cors - Importa y utiliza el middleware en tu archivo principal (ej.
server.jsoapp.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, configura las opciones de la siguiente manera:
app.use(cors({ origin: 'https,://tudominio.com' }));
Método 2: Implementar un Servidor Proxy Inverso para Desarrollo
Si no tienes acceso al código del servidor backend y necesitas evitar el bloqueo CORS durante la fase de desarrollo local, puedes configurar un proxy en tu herramienta de empaquetado (como Vite o React/Vue CLI).
- Abre el archivo de configuración de tu entorno, por ejemplo,
vite.config.js. - Agrega la sección
server.proxypara redirigir las peticiones locales:export default defineConfig({ server: { proxy: { '/api': { target: 'https://api.servidor-externo.com', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } } }); - Realiza tus peticiones en JavaScript apuntando a la ruta local
/apien lugar de la URL directa del servidor externo.