Si has trabajado con una llamada AJAX (Axios, Fetch, etc...) entonces la siguiente imagen puede ser familiar para ti, este mensaje de error es mostrado por la consola del navegador:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8ca0a081-e76d-4dba-afee-592b33bb40e0/Untitled.png

El comportamiento que estas viendo es el efecto de los navegadores implementando CORS.

Antes de que CORS se estandarizara, no había forma de llamar a un endpoint de una API en un dominio diferente por razones de seguridad. Esto fue (y hasta cierto punto todavía lo está) bloqueado por la Política del Mismo Origen (Same-Origin Policy).

CORS es un mecanismo que tiene como objetivo permitir solicitudes realizadas en su nombre y, al mismo tiempo, bloquear algunas solicitudes realizadas por JS fraudulentas y se activa cada vez que realiza una solicitud HTTP para:

Este mecanismo previene a los atacantes a inyectar un script en varios sitios web (Ejemplo en la publicidad de Google Ads) para hacer una llamada AJAX hacía una página en la que tengas una sesión activa http://bbva.com y que este haga una petición para hacer una transferencia bancaria con tus credenciales.

Access-Control-Allow

CORS usa unas cuantas cabeceras HTTP tanto en la petición como en la respuesta pero las que debes de entender para poder continuar trabajando son:

Access-Control-Allow-Origin

Esta cabecera es regresada por el servidor e indica que dominios del cliente tienen acceso a acceder a los recursos del servidor. El valor de esta cabecera puede ser:

* -> permitir que cualquier dominio acceda a los recursos
<http://example.com> -> permitir que el dominio example.com sólo pueda acceder