Si el transporte en sí está asegurado (es decir, https), un atacante no puede rastrear los datos. Pero podría estar registrado en el lado del servidor y el servidor podría verse comprometido más adelante o una fuga de seguridad podría hacer que los archivos de registro sean visibles públicamente. Dichos archivos de registro generalmente contienen la URL y pueden contener otras líneas de los encabezados como User-Agent, Referer y otros encabezados si se especifican con un formato de registro personalizado. Por lo tanto, podría ser una mala idea poner estas claves API en el encabezado de la solicitud, a menos que se asegure de que no se registren.
Un argumento en contra de poner la clave en el cuerpo de la solicitud es que ahora sería posible crear un formulario HTTP simple que incluya la clave que es más fácil de usar como una solicitud CSRF. Cuando se incluye la clave API como encabezado, el atacante debe poder realizar una solicitud XHR y está sujeto a las restricciones de CORS .
Otra razón para no incluir la clave en la URL es que podría incluirse en el encabezado del Referer de una solicitud siguiente. Además, las direcciones URL generalmente se encuentran en el historial de los navegadores para que tenga otro lugar que pueda verse comprometido. Esto es relevante solo para las solicitudes normales del navegador, es decir, las solicitudes de XHR o REST que realizan las aplicaciones no se ven afectadas.
Algunas explicaciones sobre el significado de "encabezado": a veces se usa el nombre 'encabezado' para distinguir la parte inicial del mensaje HTTP y el cuerpo. En este caso, la URL es parte del encabezado (línea de solicitud). Otras veces se habla de los encabezados (plural) y significa solo los pares "campo: valor", es decir, sin incluir la línea de solicitud con la URL. No está completamente claro para mí qué significado se usa en la pregunta, así que mejor cubriré ambas.