Las tipografías están sujetas a una regla de origen cruzado de la que las imágenes y los scripts están exentos. Sirve una desde otro nombre de host sin la cabecera correcta y el navegador la descarga, se niega a usarla y recurre a la de reserva: el archivo aparece con 200 en el panel de red y la consola lo explica en un mensaje que nadie lee.

El mensaje

Access to font at 'https://cdn.example.com/f/inter.woff2' from origin
'https://yourdomain.com' has been blocked by CORS policy

La cabecera

# nginx, on the host SERVING the font
location ~* \.(woff2?|ttf|otf|eot)$ {
    add_header Access-Control-Allow-Origin "https://yourdomain.com";
    add_header Cache-Control "public, max-age=31536000, immutable";
}
# apache / litespeed
<FilesMatch "\.(woff2?|ttf|otf|eot)$">
    Header set Access-Control-Allow-Origin "https://yourdomain.com"
</FilesMatch>

crossorigin en la precarga, si precargas

<link rel="preload" href="/fonts/inter.woff2" as="font" type="font/woff2" crossorigin>
Sin crossorigin en esa etiqueta la tipografía se descarga DOS VECES: una por la precarga y otra por la hoja de estilos, porque se tratan como peticiones distintas. La página acaba siendo más lenta que si no hubiera precarga alguna.

La respuesta más sencilla

Sirve las tipografías desde tu propio dominio. Mismo origen significa: ninguna cuestión de CORS, ninguna resolución de DNS extra, ningún segundo saludo TLS y un tercero menos en la página. Con HTTP/2 ya no queda ningún argumento de velocidad a favor de una CDN de tipografías.

# download once, commit them, serve from /fonts/
@font-face {
  font-family: "Inter";
  src: url("/fonts/inter.woff2") format("woff2");
  font-display: swap;
}
font-display: swap muestra la fuente de reserva de inmediato y la cambia cuando llega la buena. Sin él, el texto queda invisible hasta tres segundos en una conexión lenta.