馃寪 Configuraci贸n CORS y proxies

Curso Next.js — Configuraci贸n CORS y proxies

馃寪 Configuraci贸n CORS y proxies en Next.js

Aprende c贸mo manejar correctamente las pol铆ticas de CORS y configurar proxies en tus proyectos con Next.js para comunicarte con APIs externas de forma segura.


馃Л ¿Qu茅 es CORS?

CORS (Cross-Origin Resource Sharing) es un mecanismo de seguridad que impide que una p谩gina web haga solicitudes a otro dominio diferente al que sirvi贸 la p谩gina, a menos que el servidor lo permita expl铆citamente.

En otras palabras, si tu aplicaci贸n Next.js corre en http://localhost:3000 y necesita datos de una API en https://api.misitio.com, el navegador bloquear谩 la solicitud si el servidor no env铆a los encabezados CORS adecuados.

⚠️ Error com煤n: Access to fetch at ... from origin 'http://localhost:3000' has been blocked by CORS policy

馃敡 Configurar CORS en una API interna

En Next.js, puedes definir tus propias rutas de API dentro de /pages/api. Si necesitas permitir solicitudes desde otros dominios, puedes configurar manualmente los encabezados de CORS:

馃搫 pages/api/hello.js
export default function handler(req, res) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  
  if (req.method === 'OPTIONS') {
    return res.status(200).end();
  }

  res.status(200).json({ message: 'CORS habilitado correctamente 馃殌' });
}
      

Este ejemplo permite solicitudes desde cualquier origen (*), pero en producci贸n deber铆as limitarlo a dominios espec铆ficos:

res.setHeader('Access-Control-Allow-Origin', 'https://tusitio.com');

馃摝 Usando la librer铆a cors

Otra opci贸n m谩s elegante es usar el paquete cors con un middleware. Inst谩lalo con:

npm install cors

Y luego crea un middleware reutilizable en lib/init-middleware.js:

馃搫 lib/init-middleware.js
export default function initMiddleware(middleware) {
  return (req, res) =>
    new Promise((resolve, reject) => {
      middleware(req, res, (result) => {
        if (result instanceof Error) return reject(result);
        return resolve(result);
      });
    });
}
      
馃搫 pages/api/data.js
import Cors from 'cors';
import initMiddleware from '../../lib/init-middleware';

const cors = initMiddleware(
  Cors({
    methods: ['GET', 'POST', 'OPTIONS'],
    origin: ['https://tusitio.com', 'http://localhost:3000'],
  })
);

export default async function handler(req, res) {
  await cors(req, res); // Ejecuta el middleware
  res.json({ message: 'CORS configurado con 茅xito 馃帀' });
}
      

Con este enfoque, puedes controlar exactamente qu茅 dominios y m茅todos HTTP est谩n permitidos.

馃洶️ Configurar un proxy para evitar CORS

Una t茅cnica com煤n para evitar problemas de CORS en desarrollo es crear un proxy interno que redirija las solicitudes a la API externa desde tu propio servidor Next.js.

Por ejemplo, puedes crear una ruta API que act煤e como intermediario:

馃搫 pages/api/proxy.js
export default async function handler(req, res) {
  const response = await fetch('https://api.externa.com/data');
  const data = await response.json();
  res.status(200).json(data);
}
      

As铆, tu frontend puede llamar a /api/proxy sin problema de CORS, y Next.js se encarga de comunicarse con la API externa desde el servidor.

Esquema de CORS y proxy

Esquema b谩sico de comunicaci贸n con proxy interno

✅ Conclusi贸n

  • CORS es una capa de seguridad que protege al usuario final.
  • En desarrollo, puedes habilitar CORS temporalmente o usar proxies.
  • En producci贸n, configura CORS solo para tus dominios permitidos.

馃挕 Consejo: Usa proxies internos durante el desarrollo y configura CORS espec铆ficos para producci贸n. Esto evita errores de seguridad y mantiene tu aplicaci贸n protegida.

Publicar un comentario

0 Comentarios