The bug

When an item lands on the edge of a block, the client sometimes makes it fall over the edge while the server leaves it on the edge. This happens because the client thinks the drop can fall based on a slightly different location and attempts to predict the future incorrectly.

How to reproduce

Throw an item on the ground and wait until it stopped moving Run in command block close to it: teleport @e[type=item,distance=..6] ~ ~1 ~-0.6249

Code analysis

Code analysis by [Mod] Marcono1234 can be found in this comment.

Fix

Fix by [Mojang] Panda can be found in this comment.