Sam Curran (4-74) made a sterling home bid for the headlines, with three wickets in eight balls during a titanic first hour of the afternoon – and England were well-served too by Ben Stokes and James Anderson.
But Kohli (149) was an unstoppable force, after two dropped chances, as he banished memories of his miserable maiden Test tour to this country four years ago – he averaged 13.4 with a top-score of 39 – as he compiled his 22nd Test century in an India total of 274 ,which contained no other innings above 26.
Kohli’s one-man show meant a home lead of only 13 after the tourists’ last two wickets added 92.
And when Alastair Cook was bowled for the second day in succession by a Ravi Ashwin off-break, for a duck this time, England reached stumps 9-1 second time round.
The India captain attracted an outbreak of partisan boos when he walked out at 54-2, thanks to his controversial ‘send-off’ after running out his opposite number Joe Root the previous day.
But 172 balls later he had the last laugh – amid another energetic celebration – after cutting Stokes for his 14th four to reach three-figures as he dominated a last-wicket stand of 57 in which Umesh Yadav made just an unbeaten single.
India’s reply to 287 all out was eventful from the outset, but they nonetheless reached 50-0.
Curran, who had earlier failed to add to his overnight 24 as England mustered just two extra runs for their last remaining wicket, then quickly proved a dab-hand in helpful conditions.
Murali Vijay was pinned lbw, KL Rahul dragged his second ball on to his stumps, and then Dhawan edged to second slip.
After lunch Stokes soon proved he could swing the ball just as effectively as Curran, only faster.
While India were stuck on 100 for 21 balls, a full match quota of incidents took place.
Two wickets, two dropped catches and Hardik Pandya’s overturned review on nought is the synopsis of a mesmeric passage of play.
Anderson’s long-awaited duel with Kohli culminated in an edge to second slip on 21, only for Dawid Malan to put down a costly low catch. One ball later, Pandya, still on nought, this time edged to Cook at first slip, and another chance went begging.
England therefore just had two successes to show for their compelling hour of cricket.
Ajinkya Rahane had tried to leave one that bounced on him from Stokes and managed only to edge to Keaton Jennings at third slip.
Then Dinesh Karthik lost his middle-stump to an inswinger that brought Stokes his 100th Test wicket.
It was testament to Kohli’s great determination, skill and some good fortune that he survived when it seemed at one point a wicket was odds-on every ball.
He did so again, immediately after reaching his half-century with his ninth four, when he was again dropped by Malan in the slips, a much tougher chance than the previous opportunity, off Stokes.
After tea, Anderson finally had deserved reward with a dead-eyed delivery that took the off-bail as Ashwin played inside the line – and when a driving Mohammed Shami edged him to Malan, India were eight down and still 105 runs behind.
But Kohli was far from done as he went on to better his 2014 tour aggregate in just one attempt before finally cutting Adil Rashid into the hands of point to leave England’s openers 3.4 overs of aggravation; time for Cook to find trouble again.
Curran said: “No one means to drop a catch and it is not ideal dropping a man of his (Kohli’s) calibre in the slips. No one means to do it.
“We kept bashing away, our plans were pretty good to him and on another day they would be taken and they would be 200 all out. The battle was unbelievable to watch.”
On Cook’s dismissal and England’s hopes for day three, Curran added: “Our main aim there at the end was to get none down, but it was a pretty good ball.”