Understanding getchaintips in terms of chain reorganisations
valid-fork means that the blocks were fully downloaded and validated. It is likely that they were part of the active chain but were reorganized after a better chain was received.

valid-headers means that the blocks were fully downloaded but not fully validated. Only the headers were validated to have a valid Proof of Work before the block was written to disk. Tips with this status could have been valid-fork, but they never had the chance to become part of the active chain and thus never actually fully validated.

headers-only means that the node only has the block headers but not the full blocks themselves. This could happen for a variety of reasons - maybe a node announced those headers but failed to provide the block itself.

One notable headers-only entry you may see is the Bitcoin Cash fork. This is listed as headers-only your node may have received the block headers for that fork (up until the PoW changed) but did not download the blocks for those headers after it found that the first block in that fork was invalid.