Match ends, Norwich City 0, Cardiff City 2.
Cardiff City regained their advantage in the Championship automatic spots after securing a late win at Carrow Road.
Substitute Kenneth Zohore's goal helped Cardiff end a run of successive defeats with arguably their most important victory of the whole campaign.
Junior Hoilett's superb strike capped the victory in stoppage time.
Fulham's 1-1 draw with Brentford means Cardiff regained second spot with a game in hand on the Londoners.
Zohore's winning goal came from a rebound after goalkeeper Angus Gunn failed to hold his original header on 85 minutes and rewarded the Bluebirds for a bold approach after the interval, with Hoilett making the result safe with a blast.
Cardiff had never previously done a league double over Norwich.
Norwich hit the post in the first period while Craig Bryson came closest for Cardiff before their late efforts.
The Bluebirds had shaded an even first half, but never truly looked like forcing a breakthrough.
Dennis Srbeny struck the first effort for the hosts, but Neil Etheridge was equal to it, with Srbeny Norwich's most likely route to a goal. He also tested Cardiff just before the half hour mark, but a fine block kept the hosts at bay.
The Bluebirds were not helped defensively when Sol Bamba was forced off with injury and replaced by Bruno Manga, but it might have got even worse when Moritz Leitner teed up Srbeny who struck the post.
Cardiff's Craig Bryson was a key influence on the match and twice came close for Cardiff in the first period, while Junior Hoilett and Gary Madine also saw presentable opportunities go begging before the break.
The Bluebirds had the first key chance after the break, with Hoilett's perfect cross finding Manga who headed the ball across goal and wide.
Norwich also created a good early second half opportunity, but Josh Murphy scuffed his shot wide from a narrow angle and Alexander Tettey was also wide of the mark with a firm effort.
Murphy for the Canaries and Hoilett for the Bluebirds were comfortably the brightest sparks for their respective sides, but when Hoilett burst clear Kenneth Zohore could only turn his cross into the side-netting.
However, Zohore then sent Cardiff into raptures with his late strike that eradicated memories of recent last-gasp disappointments against Wolves, where they missed two penalties and at Aston Villa where they conceded after 87 minutes.
Hoilett ensured there would be no late despair this time by hammering home a volley from the edge of the area in time added on.
Cardiff boss Neil Warnock said:
"Today we got a brilliant result, I would say our best result of the season, and it's all still in our own hands. If we keep winning no-one can catch us.
"Norwich are a good side, and we made a bit of a slow start, but I thought we defended really well. All the back four were excellent, and Bruno (Ecuele Manga) when he came on, but I thought Sean Morrison stood out. I'd give him 12 out of 10.
"Norwich probably played the better stuff in the first half but I think we created the better chances.
"In the second half we kept going and eventually got our reward. That's what I love about the Championship, being in charge of sides like these, a group of lads who are brave and honest and will go out there and die for you, week in, week out.
"They have done it again today and now I should think they are looking forward to a week's break. I know I am!"
Norwich manager Daniel Farke said:
"Sometimes football can be the most unfair sport in the world, you just have to accept that, but this result is really tough to take.
"After 85 minutes I don't think Cardiff were expecting to win the match, they would have been happy with a point, I think.
"It was a brilliant performance from my team and I am really happy with the way they played.
"They were playing against a good, strong side and did really well - I can only compliment my players for that.
"They were committed, there was great togetherness and I thought we created the better chances. Certainly in the second half I think there was only one team trying to win the game.
"When they scored in the 87th minute it was very harsh on us."
- 4ReedSubstituted forPintoat 81'minutes
- 10LeitnerSubstituted forHoolahanat 85'minutes
- 32SrbenySubstituted forOliveiraat 81'minutes
- 11MurphyBooked at 90mins
- 2PeltierBooked at 66mins
- 14BambaSubstituted forEcuele Mangaat 34'minutes
- 20DamourBooked at 44minsSubstituted forPatersonat 45'minutes
- 44MadineSubstituted forZohoreat 73'minutes
- 5Ecuele Manga
- Tim Robinson
- Shots on Target
Second Half ends, Norwich City 0, Cardiff City 2.
Attempt missed. James Maddison (Norwich City) right footed shot from more than 35 yards misses to the left. Assisted by Nélson Oliveira.
Goal! Norwich City 0, Cardiff City 2. David Junior Hoilett (Cardiff City) right footed shot from outside the box to the top left corner.
Josh Murphy (Norwich City) is shown the yellow card.
Foul by Josh Murphy (Norwich City).
Callum Paterson (Cardiff City) wins a free kick in the defensive half.
Corner, Cardiff City. Conceded by Timm Klose.
Corner, Cardiff City. Conceded by Angus Gunn.
Attempt saved. David Junior Hoilett (Cardiff City) left footed shot from outside the box is saved in the top centre of the goal.
Foul by Grant Hanley (Norwich City).
Craig Bryson (Cardiff City) wins a free kick on the left wing.
Foul by Grant Hanley (Norwich City).
Kenneth Zohore (Cardiff City) wins a free kick in the defensive half.
Goal! Norwich City 0, Cardiff City 1. Kenneth Zohore (Cardiff City) left footed shot from a difficult angle on the right to the bottom right corner.
Attempt saved. Kenneth Zohore (Cardiff City) header from the centre of the box is saved in the bottom right corner. Assisted by Sean Morrison with a headed pass.
Offside, Norwich City. Angus Gunn tries a through ball, but Nélson Oliveira is caught offside.
Substitution, Norwich City. Wes Hoolahan replaces Moritz Leitner.
Angus Gunn (Norwich City) wins a free kick in the defensive half.
Foul by Callum Paterson (Cardiff City).