Centuries from Alastair Cook — in his final test innings — and captain Joe Root put England in position for a second innings declaration on 423-8, leaving India needing 463 runs to win the fifth test shortly after tea on Day 4 at the Oval.
Playing in his 161st and final test match, Cook, and his successor as skipper, Root, both struck centuries before being dismissed in consecutive deliveries as their 259-run third-wicket partnership left England well-placed to extend an unassailable 3-1 lead in the five-match series.
Cook's landmark moment came in the strangest of circumstances, as what appeared to be a single to take him to 97, became five, when Jasprit Bumrah's throw to the non-striker's end went for four overthrows, taking England's all-time leading run-scorer to 101 from 210 balls.
Cook's perfect finale, which saw him pass Sri Lankan Kumar Sangakarra as the fifth highest test run-scorer of all time, finally came to an end when he was caught behind off India debutant Hanuma Vihari for 147 from 286 balls.
Root was out for 125 to the same bowler a ball earlier, having been slightly fortunate to complete his first test century in more than a year after surviving two dropped chances.
Jonny Bairstow was bowled by Mohammed Shami for 18 and Jos Buttler was caught for a duck off Ravindra Jadeja (3-179) to leave England 364-6 at tea.
Ben Stokes made an entertaining 37 before being caught on the boundary off Jadeja, and then Root finally declared when Sam Curran (21) holed out to give Vihari (3-37) a third wicket.
England's James Anderson needs three wickets to go past Australian Glenn McGrath as the most successful fast-bowler in test history.