parabéns brigrar com o cross é um ritual de passagem de todo dev. lembro até hoje dos meus primeiros projeto que davam erro e eu não sabia porque, mesmo a api funcionado no insominia, nada de funcionar no frontend...
agora é padrão em todo projeto incluir bloco basico
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");// O SEGREDO: Interceptar o Preflight (OPTIONS) e matar a execução com status 200
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
http_response_code(200);
exit();
você ainda pode se deparar com problemas com envio de cookies pra aprender a coloca credential:include em todo ajax tambem .
agora o curioso é saber que o agente faz a requisição direto do navegador do usuario, se ele fizesse internamente poderia ignorar os headers
um serviço gratuito que pode te salvar quando o problema de cross vem de uma api que você não controla é usar o https://www.cors-anywhere.com/