L'uso di POST offre i seguenti vantaggi rispetto a GET:
Evita la cronologia URL del browser . Qualsiasi dato sensibile nel modulo non viene passato nell'URL, il che significa che i dati nel modulo non sono visibili nella cronologia del browser e non possono essere salvati una volta inviati. (Nota: il corpo del modulo a volte viene memorizzato, a seconda del browser e delle impostazioni, ma di solito non è visibile).
Possibilità di passare token nascosti . L'uso di POST offre alla tua applicazione la flessibilità di includere più campi (c'è un limite rigido alla lunghezza di una richiesta GET), inclusi elementi importanti come token CSRF, checksum ViewState MAC, ecc. Non vorresti mostrare questi campi nel barra degli indirizzi.
Meno registrazioni . I dati nell'URL stesso sono conservati in un'intestazione HTTP, che è più probabile che venga registrata dalle appliance di rete intermedie (ad esempio se si utilizza la ripartizione del carico di lavoro SSL o l'ispezione deep packet) o dai registri del server web. IIS, ad esempio, registra l'intero URL e querystring con ogni singola richiesta, per impostazione predefinita, e questo viene archiviato in un file flat che rimane sul server Web per sempre. I dati nel corpo del modulo, d'altra parte, non sono registrati per impostazione predefinita.
Evita l'invio di informazioni personali alle analitiche . Se nell'URL ci sono informazioni riservate, si rischia che i dati finiscano per essere inviati a soluzioni di analisi o a terze parti che si stanno utilizzando. In generale, i dati nel corpo del modulo non finiranno per essere inviati a meno che tu non facciano il codice per farlo.
L'uso di POST riduce automaticamente il rischio di CSRF? NO !! Ma in genere una mitigazione CSRF comporterà l'utilizzo di HTTP POST + un token anti-CSRF, quindi potrei capire perché penseresti che vadano insieme. Senza il token, il verbo POST non fa nulla di per sé per mitigare CSRF tramite XSS riflesso o memorizzato.