I'm going to disagree about 3, because the player won't know what's happening at all, if they're lagging then they're getting late updates anyway (stuff like enemy position, projectiles, etc... will be updated late due to the lag) so the advantage is really negated by the lag.
Also just sending requests to the server all the time makes things harder on the server, and harder on the internet connection, making the game more varied based on ping, and quite possibly could cause server issues.
so that leaves 1 and 2, 2 has no real advantages over 1 as the jump-backs will still occur, and might confuse players if they're seeing their own and other peoples' attacks sticking in the air.
1 is the least confusing for non-savvy people (at least in my opinion), and it helps programming-wise to keep things separate (server vs client).