CORS CON APACHE: CÓMO CONFIGURARLO CORRECTAMENTE

CORS es el acrónimo de Cross-Origin-Resource-Sharing q es un mecanismo que permite o restringe solicitudes HTTP entre diferentes orígenes (dominios, protocolos o puertos) en navegadores web. En el contexto de Apache, CORS se configura para controlar cómo los recursos de tu servidor pueden ser accedidos por aplicaciones web alojadas en otros dominios.
Los navegadores rechazan, por defecto, este tipo de peticiones, a través de CORS es posible tanto habilitarlas como especificar que tipo de peticiones y desde donde son permitidas.
Hay dos formas de habilitar CORS:
  • Directamente en el servidor Apache a través de un .htaccess.
  • En el código específico del contenido o recursos que queremos pedir.
Yo solo voy a explicar desde Apache y es bastante sencillo solo hay que añadir una línea en el archivo .htaccess del directorio al cual vamos a acceder. La linea que hay que añadir es:


<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>
Access-Control-Allow-Origin: Especifica qué orígenes pueden acceder a los recursos. Usa "*" para permitir todos los orígenes o un dominio específico como https://ejemplo.com.zbr/Ejemppo completo:>


<IfModule mod_headers.c>

 Header set Access-Control-Allow-Origin "https://ejemplo.com"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "Content-Type, Authorization"
    Header set Access-Control-Allow-Credentials "true"
    Header set Access-Control-Max-Age "86400"

</IfModule>
Lo que se está haciendo es indicar que se agregue una cabecera en la petición en la que se indique que se están aceptando peticiones desde distintos servidores al actual, y responder a ellas como si fuesen peticiones locales. El asterisco que aparece al final es un parámetro que representa desde que hosts se van a aceptar peticiones.
En este caso, al ser un asterisco, indica que se acepta cualquier petición desde cualquier servidor y será tratada como una petición local. Ésto es bastante arriesgado por seguridad, por lo que se recomienda tratar de restringirlo solo a los servidores que tenemos certeza que harán las peticiones, de la siguiente forma:


Header add Access-Control-Allow-Origin
"http://www.example.com"
Nota: Si por alguna razón las peticiones son rechazadas hay que comprobar que esté activado mod_headers en Apache y/o que no esté desactivada la opción para sobreescribir los archivos .htaccess.

Manejo de solicitudes preflight (OPTIONS)

Las solicitudes preflight son enviadas automáticamente por los navegadores para verificar si una solicitud CORS es válida. Asegúrate de que tu servidor responda correctamente a las solicitudes OPTIONS. Puedes usar un bloque como este:


<IfModule mod_headers.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]

</IfModule>
Se pueden usar las herramientas de desarrollador del navegador (pestaña "Network") para verificar las cabeceras de respuesta. Si algo falla, revisa los logs de Apache (error_log o access_log) para identificar problemas. Consideraciones de seguridadEvita usar * en producción: Permitir todos los orígenes (Access-Control-Allow-Origin: *) puede ser inseguro, especialmente si tu aplicación maneja datos sensibles o credenciales. Especifica orígenes concretos: Limita los dominios permitidos a los estrictamente necesarios. Valida métodos y cabeceras: Solo permite los métodos (GET, POST, etc.) y cabeceras necesarios para tu aplicación.