Технически между двумя этими методами нет никакой разницы, это все на уровне спецификаций - которые "нужно" соблюдать, но мало кто соблюдает. Фактически же эти спецификации будут использоваться только при проксировании - тоесть если вы используете прокси сервер - то в случае неисполнения запроса типо Get - сервер его повторит( так метод Get идемпотентный).
Про тело запроса - оно может и в Get - ничего этому не мешает.
В реальном мире тот же самый Post очень часто используется для получения информации сервера ,а не для записи,происходит это тогда,когда в теле запроса нужно передать какой то объект( например какой то сложный фильтр) и выбирают меньшее из зол - Get с телом хуже чем идемпотентый Post- но если стоит прокси - в случае неудачи такой пост запрос не будет повторен
Суммируя - есть некая договоренность ,желательно ее соблюдать - но если нет - ничего не случится ))