Esta questão não é sobre quando usar GET ou POST em geral; é sobre qual é o recomendado para lidar com o logoff de um aplicativo da web. Encontrei muitas informações sobre as diferenças entre GET e POST no sentido geral, mas não encontrei uma resposta definitiva para esse cenário em particular.
Como pragmático, estou inclinado a usar o GET, porque implementá-lo é muito mais simples que o POST; basta soltar um link simples e pronto. Esse parece ser o caso da grande maioria dos sites em que consigo pensar, pelo menos do alto da minha cabeça. Até o Stack Overflow lida com o logout com GET.
O que me fez hesitar é o argumento (embora antigo) de que alguns aceleradores / proxies da Web pré-armazenam em cache as páginas acessando e recuperando todos os links encontrados na página, para que o usuário obtenha uma resposta mais rápida ao clicar nelas. Não tenho certeza se isso ainda se aplica, mas, se esse fosse o caso, em teoria, um usuário com um desses aceleradores seria expulso do aplicativo assim que efetuar o login, porque o acelerador encontraria e recuperaria o logout mesmo que ela nunca tenha clicado nele.
Tudo o que li até agora sugere que o POST deve ser usado para "ações destrutivas", enquanto as ações que não alteram o estado interno da consulta do aplicativo - como essas - devem ser tratadas com GET . Com base nisso, a verdadeira questão aqui é:
O logoff de um aplicativo é considerado uma ação destrutiva / altera o estado interno do aplicativo?