I did some tests and I can say that FLF OCP's statement "A node does not keep the former alternative heads" it's not true.
If i query my node with
tezos-client rpc get /chains/main/blocks i get a list of block_heads. The first one is the current head but the others are all (actually not all**) the alt heads.
And if i also query my node with
tezos-client rpc get /chains/main/blocks/<one head from the list> i get all the info about it.
So, the node keep tracks of the alt heads too and i can retrieve it!
**Just a note
Quering different node give me different result.
On my service node i get a list of 21 heads, on mainnet-node.tzscan.io i get 49 heads and on my baker i get 55 heads. This is partially related to node's uptime but not only. Some heads (even recent ones) are present only in one node and not in others.
(this the reason why i got an error looking for the head above on one of my node)
Does anyone have any idea why the nodes do not have all the same information (considering that all have the same uptime)?