Se il trasporto stesso è protetto (cioè https), un utente malintenzionato non può annusare i dati. Ma potrebbe essere registrato sul lato server e il server potrebbe essere successivamente compromesso o qualche perdita di sicurezza potrebbe causare la visualizzazione dei file di registro. Tali file di registro di solito contengono l'URL e potrebbero contenere altre righe dalle intestazioni come User-Agent, Referer e altre intestazioni se specificato con un formato di log personalizzato. Pertanto potrebbe essere una cattiva idea inserire queste chiavi API nell'intestazione della richiesta, a meno che non si accerti che non vengano registrate.
Un argomento contro il mettere la chiave nel corpo della richiesta è che ora sarebbe possibile creare un semplice modulo HTTP che include la chiave che è più facile da usare come richiesta CSRF. Quando si include la chiave API come intestazione, invece, l'utente malintenzionato deve essere in grado di eseguire una richiesta XHR ed è soggetto alle restrizioni di CORS .
Un altro motivo per non includere la chiave nell'URL è che potrebbe essere incluso nell'intestazione Referer di una richiesta successiva. Inoltre, gli URL di solito sono contenuti nella cronologia dei browser in modo da avere un altro posto che potrebbe essere compromesso. Ciò è rilevante solo per le normali richieste del browser, ovvero le richieste XHR o REST eseguite dalle applicazioni non sono interessate.
Alcune spiegazioni sul significato di "intestazione": a volte uno usa il nome "intestazione" per distinguere la parte iniziale del messaggio HTTP e il corpo. In questo caso l'URL fa parte dell'intestazione (riga di richiesta). Altre volte si parla delle intestazioni (plurale) e si intende solo la coppia "campo: valore", cioè non include la riga di richiesta con l'URL. Per me non è del tutto chiaro quale significato sia usato nella domanda, quindi è meglio che li abbia trattati entrambi.