India, set 73 to win, were 10 without loss at stumps on the fourth day needing just a further 63 runs for only their fifth win in 47 Tests in England.
England, who have gone 11 Test campaigns since last losing a series, the 2001 Ashes, on home soil were now looking at going 1-0 down with just the third and final Test at The Oval to come.
Dinesh Karthik was six not out and Wasim Jaffer three not out.
Left-arm quick Zaheer took five for 75 in 27 overs as England were bowled out for 355 in their second innings. That gave the 28-year-old pace bowler Test best match figures of nine for 134 after his first innings return of four for 59.
England captain Michael Vaughan held India up with
an elegant hundred but the second new ball proved England's undoing, their last seven wickets falling for 85 runs in 22 overs.
Zaheer, whose first over with the new ball cost 13 runs, then took two wickets in his next three overs — all of them maidens.
England, at tea on the fourth day, were 221 for three — still 62 runs shy of avoiding an innings defeat.Vaughan was 91 not out and Paul Collingwood 13 not out.
The England skipper on-drove left-arm quick Rudra Pratap Singh in classical style to go to 98. And the Yorkshire batsman completed his 17th hundred in 69 Tests and his fourth against India with his 15th boundary, an elegant back-foot force through the covers off leg-spinner Anil Kumble.
Vaughan, whose highest Test score of 197 came against India at Trent Bridge five years ago, saw his rearguard action end as Zaheer struck twice in three balls with the new ball.
Trying to turn Zaheer on the leg-side, Vaughan saw the ball hit his thigh pad, bounce down and trickle onto the stumps as he played on for 124. He faced 193 balls with 18 fours in nearly five hours at the crease.
Two balls later new batsman Ian Bell, who had been hit on the back of the head by a net bowler before play started on Monday, was out for nought falling plumb lbw to Zaheer.
England were now 287 for five, just four runs ahead.
Collingwood then completed a 117-ball fifty with five fours but on 63 he was well caught low down by first slip Karthik to give Zaheer his fifth five-wicket haul in his 49 Tests and first against England.
The innings ended when last man James Anderson was bowled by Kumble.
Earlier, there was a fresh flashpoint in this match when fast bowler Shanthakumaran Sreesanth let loose an inswinging beamer which just missed Kevin Pietersen's head.
The bowler raised his hand in apology and at the end of the over India captain Rahul Dravid, in a move to calm tempers, spoke to the batsmen.
Next over Singh was convinced he had Pietersen caught behind, driving outside off-stump. But next ball Singh, from around the wicket and wide on the crease got a curving delivery to cut back sharply off the pitch and Pietersen, padding up, was lbw for 19.
Monday's first session was marred by the latest of several unpleasant incidents this series when Sreesanth brushed shoulders with Vaughan and was spoken to by South African umpire Ian Howell.
Scoreboard
ENGLAND (1st Innings) 198 (Zaheer Khan 4-59).
INDIA (1st Innings) 481 (S.R. Tendulkar 91, S.C. Ganguly 79, K.D. Karthik 77, Wasim Jaffer 62, V.V.S. Laxman 54; M.S. Panesar 4-101).
ENGLAND (2nd Innings, overnight 43-0):
A.J. Strauss c Dhoni b Zaheer 55
A.N. Cook lbw b Zaheer 23
M.P. Vaughan b Zaheer 124
K.P. Pietersen lbw b R.P. Singh 19
P.D. Collingwood c Karthik b Zaheer 63
I.R. Bell lbw b Zaheer 0
M.J. Prior b R.P. Singh 7
C.T. Tremlett c R.P. Singh b Kumble 5
R.J. Sidebottom not out 25
M.S. Panesar c Karthik b Kumble 4
J.M. Anderson b Kumble 1
EXTRAS (B-7, LB-6, W-9, NB-7) 29
TOTAL (all out, 104 overs) 355
FALL OF WKTS: 1-48, 2-130, 3-175, 4-287, 5-287, 6-304, 7-323, 8-329, 9-333.
BOWLING: Zaheer Khan 27-10-75-5 (1w); Sreesanth 21-2-60-0 (5nb, 7w); R.P. Singh 18-5-52-2 (1w); Kumble 25-2-104-3 (2nb); Ganguly 6-0-22-0; Tendulkar 7-0-29-0.
INDIA (2nd Innings):
K.D. Karthik not out 3
Wasim Jaffer not out 6
EXTRAS (LB-1) 1
TOTAL (for no wkt, 3 overs) 10
BOWLING (to-date): Anderson 2-1-6-0; Sidebottom 1-0-3-0.—Agencies