concepto · intermedio · 1 min de lectura
CORS — Cross-Origin Resource Sharing
CORS es un mecanismo de seguridad del navegador que permite que un servidor controle qué dominios externos pueden acceder a sus recursos, relajando la política same-origin de forma controlada.
No requiere conocimientos previos.
Alcance en breve
Cubre
- CORS as a concept
No cubre
- implementation details
Supone
- The reader understands relevant fundamentals.
Resumen
Por defecto, el navegador aplica la política same-origin: un script de sitio.com no puede leer datos de api.otro.com. CORS permite que api.otro.com declare explícitamente «confío en sitio.com, puede leer mis datos» mediante headers HTTP como Access-Control-Allow-Origin.
El navegador envía un preflight request —OPTIONS— antes de requests complejos para verificar que el servidor acepta el origen solicitado. El servidor responde con los headers CORS y el navegador decide si bloquea o permite.
Alcance y supuestos
Cubre CORS como mecanismo de seguridad del navegador y sus headers. Asume familiaridad con HTTP.
Modelo mental
Un portero que solo deja entrar a personas con invitación. Si alguien de otro edificio quiere entrar, el portero llama al residente y le pregunta «¿dejo pasar a esta persona?». El residente responde sí o no. CORS es el protocolo de esa llamada.
Uso práctico
- ✅ Configurar CORS explícitamente, nunca usar
Access-Control-Allow-Origin: *con credenciales. - ❌ CORS no es un mecanismo de seguridad contra ataques directos al servidor —solo aplica en navegadores—.
Ejemplo trabajado: CORS en una API
La API en api.ejemplo.com configura Access-Control-Allow-Origin: https://app.ejemplo.com. Un script malicioso en hacker.com intenta leer datos de la API. El navegador bloquea la respuesta porque el header CORS no incluye hacker.com. La misma API responde correctamente cuando la llama app.ejemplo.com.
Evidencia
- MDN Web Docs tiene la referencia definitiva de CORS. La política same-origin es fundamental para la seguridad web.
Fuentes citadas
- Wikipedia, OWASP (Síntesis, 21-07-2026)