Match ends, Norwich City 4, Millwall 3.
Norwich City boss Daniel Farke said his side "proved they had special spirit" after a 97th-minute goal from Teemu Pukki saw them fight back from 3-2 down to beat Millwall and go top of the Championship.
Tom Elliott headed the Lions in front in the 24th minute before Pukki fired in an equaliser after the break.
Pukki then had a spot-kick saved before Mortiz Leitner scored for the Canaries from 22 yards but Ryan Leonard's shot made it 2-2.
Jed Wallace fired Millwall back in front before Jordan Rhodes and Pukki struck in a dramatic period of injury time.
"It was an unbelievable game with so many turning points and we were able to win it in the last moment. Normally you can not win a game with so many odds against you," he told BBC Radio Norfolk.
"After we conceded to go 3-2 down we put all our offensive players on the pitch and then it was down to them. The goals were not luck, all of the credit and compliments go to the lads.
"It's important to enjoy special moments like this. It was a magic night."
An incredible final 16 minutes saw four goals scored with Millwall looking like they would claim all three points going into time added on.
But Rhodes and Pukki had other ideas as their late goals left the Canaries two points clear of Middlesbrough at the top of the Championship.
Lions boss Neil Harris was furious with the goals which denied his side a first win at Carrow Road since 1968.
He said: "My six-year-old daughter plays in an under-seven team and I think they would have been disappointed to concede the two goals we did at the end.
"I am the captain of the ship so I take responsibility but the players involved have to hold their hands up and say that's unacceptable.
"They simply have to take up better positions and defend the box better. There were plenty of good things from the team - but that is no consolation right now."
Crazy finish at Carrow Road
The Lions took the lead midway through the first half as Elliott nodded past keeper Tim Krul.
Pukki then claimed his opening goal and the first of the afternoon's three equalisers as he turned in Marco Stiepermann from inside the area.
The Finland international was then denied from the spot after Onel Hernandez's goal-bound shot was handled by Murray Wallace.
Norwich did then get a second through Leitner's thunderous low drive before Leonard struck from close range two minutes later.
Wallace then punished Krul by intercepting his weak throw and scoring after a one-two with Steve Morison.
But the Canaries were not done and continued their impressive winning run as Rhodes and Pukki both found the net from inside the box.
- 12LewisSubstituted forVrancicat 88'minutes
- 10LeitnerBooked at 66mins
- 17BuendíaBooked at 86mins
- 18StiepermannSubstituted forRhodesat 88'minutes
- 13AmosBooked at 90mins
- 2McLaughlinBooked at 90mins
- 4HutchinsonBooked at 51mins
- 25M WallaceBooked at 37mins
- 7J Wallace
- 11FergusonSubstituted forTunnicliffeat 88'minutes
- 9GregorySubstituted forMeredithat 89'minutes
- 19ElliottBooked at 69minsSubstituted forMorisonat 73'minutes
- Jeremy Simpson
- Shots on Target
Second Half ends, Norwich City 4, Millwall 3.
Goal! Norwich City 4, Millwall 3. Teemu Pukki (Norwich City) right footed shot from the left side of the box to the centre of the goal. Assisted by Mario Vrancic.
Mario Vrancic (Norwich City) wins a free kick in the defensive half.
Foul by Jake Cooper (Millwall).
Corner, Millwall. Conceded by Maximillian Aarons.
Ben Amos (Millwall) is shown the yellow card.
Attempt missed. Alexander Tettey (Norwich City) left footed shot from outside the box is high and wide to the left. Assisted by Emiliano Buendía.
Attempt blocked. Timm Klose (Norwich City) left footed shot from outside the box is blocked.
Conor McLaughlin (Millwall) is shown the yellow card for a bad foul.
Maximillian Aarons (Norwich City) wins a free kick on the left wing.
Foul by Conor McLaughlin (Millwall).
Substitution, Millwall. James Meredith replaces Lee Gregory.
Goal! Norwich City 3, Millwall 3. Jordan Rhodes (Norwich City) right footed shot from the centre of the box to the bottom right corner. Assisted by Emiliano Buendía.
Attempt missed. Timm Klose (Norwich City) header from the centre of the box misses to the right. Assisted by Moritz Leitner with a cross.
Substitution, Norwich City. Mario Vrancic replaces Jamal Lewis.
Substitution, Norwich City. Jordan Rhodes replaces Marco Stiepermann.
Delay over. They are ready to continue.
Substitution, Millwall. Ryan Tunnicliffe replaces Shane Ferguson because of an injury.
Delay in match Shane Ferguson (Millwall) because of an injury.