básicamente es por la norma del protocolo HTTP, si analistas la cadena lo que le está indicando es que se van a pasar datos codificados en url (urlencoded), de otro modo es probable que del lado del servidor no pueda determinar si exista data por POST.
GET no lo necesita, porque en realidad la data se pasa directamente en la URL, lo que te permite, por ejemplo enviar datos por GET y POST simultáneamente, pero para efectos del lado del server se necesita la cabecera anterior para considerarlo POST, tenga o no data por GET lo cual no es obligatorio