Norwich City edged a step closer to the Sky Bet Championship title with a 3-1 win over Queens Park Rangers at The Kiyan Prince Foundation Stadium.
The first-half was very open, with both sides enjoying sights at goal, but it was City who got a reward for their control of the game when Xavi Quintilla's effort was fumbled into the net by QPR goalkeeper Seny Dieng.
City were indebted to Tim Krul for preserving their lead in the second-half as his saved a spot kick from Lyndon Dykes, before the visitors went straight up the other end to double their lead through a super Max Aarons finish.
Dykes made amends with under 20 minutes to go, finishing from close range, but City sealed the three points on 82 minutes when Emi Buendia finished from close range following a Kenny McLean centre.
Daniel Farke named an unchanged eleven following Tuesday's 1-0 defeat to Watford, with Xavi Quintilla continuing to deputise for the suspended Dimitris Giannoulis. QPR made three changes with Seny Dieng, Lee Wallace and Jordy De Wijs coming into the side.
QPR came out of the blocks firing and pressed City high, winning the ball off Cantwell in his own box, and that allowed Osman Kakay to flash an effort across goal and narrowly wide.
At the other end, a long punt from Grant Hanley was latched onto by Emi Buendia and he lofted the ball over Dieng but saw his effort bounce wide of goal.
City used that as momentum as began to move the ball around at pace, with Pukki cutting inside on five minutes to drag a shot wide of goal from the edge of the area.
On ten minutes, Pukki was presented a shooting opportunity once again, with Kieran Dowell the architect on this occasion but the Finn lost his footing at the crucial point and his shot was saved with Dieng.
After a frantic start, the game settled midway through the first-half, but City continued to control possession and their patience continued to earn chances, with Dowell firing Quintilla's cutback wide on 21 minutes.
City got their deserved goal on 32 minutes, but there was a touch of fortune about it as Quintilla's stinging drive from distance was spilled by Dieng and trickled over the line. Moments later, Dowell took aim once again from distance but Dieng was equal to this effort on this occasion as the Canaries sensed blood.
After a quiet period in front of goal, QPR burst into life following the opener and Krul made an important save with his feet to deny Lyndon Dykes who'd broken the offside trap.
QPR probed as the half drew to a close, but City kept them at bay with relative ease.
City started the second-half well as they chased a second goal and Buendia struck a fierce effort from the edge of the area which Dieng could only punch clear. Moments later, Cantwell missed the target from distance as City made their match-winning intentions clear.
City almost relinquished their lead on 55 minutes when Grant Hanley was adjudged to have fouled Chris Willock in the penalty area. Dykes firing the ball straight down the middle from the spot but Krul saved superbly with his feet to preserve his team's advantage.
It was a killer blow for the hosts which was compiled minutes later when City doubled their advantage. Kenny McLean clipped a teasing cross from the left to the back post and Aarons ghosted behind his marker to volley the ball into the far corner.
It could and should have been three just after the hour mark as an intricate passing move set Pukki away and clear, however he could only fire wide of the post with just Dieng to beat.
QPR had a lifeline on on 72 minutes when Willock's low cross was diverted towards goal by substitute Charlie Austin and Dykes was on hand to tap home from a couple of yards to reduce the arrears.
Austin was in the thick of things again on 77 minutes, nodding a teasing Adomah cross just over as QPR chased an equaliser.
But the game was put beyond doubt in the final ten minutes as City pressed their opponents and won the ball back in the final third, with McLean teeing up Buendia to finish at the back post for 3-1.
With Watford beating Millwall at Vicarage Road, the race for the title will move to next weekend with City hosting Reading at Carrow Road next Saturday (3pm)
Queens Park Rangers: Dieng (GK), Wallace (c), Dickie, De Wijs (Ball, 76), Barbet, Dykes, Chair (Austin, 66), Johansen (Bettache, 89), Thomas (Field, 46), Willock, Kakay (Adomah, 66)
Subs not used: Walsh (GK), Kane, Bonne, Hamalainen
Goals: Dykes (72)
Bookings: Field (68)
Norwich City: Krul (GK), Aarons, Hanley (c), Dowell (Sorensen, 74), Cantwell (Hernandez, 85), Quintilla (Tettey, 89), Buendia (Placheta, 88), Skipp, Pukki (Hugill, 85), McLean, Omobamidele
Subs not used: Nyland (GK), Vrancic, Stiepermann, Mumba
Goals: Quintilla (32), Aarons (57), Buendia (82)
Venue: The Kiyan Prince Foundation Stadium
Referee: James Linington