Ollie Hassell-Collins scored four tries as London Irish leapfrogged Gloucester to move into the Premiership top five.
The England Under-20s winger scored a quick-fire double in the first half to help the Exiles into a 10-3 lead.
The 21-year-old then intercepted and raced 60m for his hat-trick score before Gloucester hit back with tries from Charlie Chapman and Ollie Thorley.
Hassell-Collins' fourth made it 24-15 but a late try for Louis Rees-Zammit gave Gloucester a losing bonus point.
It was a third league defeat in a row for the visitors though, who drop to seventh, while the Exiles surged to a third straight win.
The Exiles dominated the early exchanges but Billy Twelvetrees opened the scoring with a penalty on Gloucester's first foray into the hosts' territory after Thorley's counter-attack.
But Irish responded swiftly, a flicked pass from Nick Phipps to Stephen Myler after a 5m scrum seeing the fly-half put Hassell-Collins over in the left corner.
It was far too easy from a Gloucester perspective, with their blind-side defence exposed, and the Exiles punished further lapses with their second try five minutes later.
Hassell-Collins brushed off a weak tackle from scrum-half Charlie Chapman, making his first Premiership start for Gloucester, and stretched over for his second score.
Twelvetrees missed a further penalty attempt before the interval as the visitors came back into it and they started the second period on the attack.
But Hassell-Collins picked off a pass on his own 22 to race away for his hat-trick try, Myler - who had missed his first two conversion attempts - this time adding the extras for a 17-3 lead.
Gloucester, to their credit, responded well and scrum-half Chapman danced his way over from a 5m scrum, Twelvetrees adding the extras to bring the visitors within range.
Thorley's superb finish in the corner made it a two-point game, with Twelvetrees unable to convert.
But a clever offload from Motu Matu'u - who started at hooker after the late withdrawal of Dave Porecki - saw Terrence Hepetema put Hassell-Collins for his fourth try, taking his league tally to the season for seven as the Exiles earned a bonus point.
Gloucester replaced fly-half Danny Cipriani, playing the day after releasing an emotional video tribute to ex-girlfriend Caroline Flack, who took her own life last week, with youngster Lloyd Evans.
Matt Rogerson had a further try for the hosts disallowed by the TMO, and a smart finish from Rees-Zammit - the teenager scoring his seventh league try of the campaign, ensured a tense finish.
London Irish: Loader; Williams, Rona, Hepetema, Hassell-Collins; Myler, Phipps; Hobbs-Awoyemi, Matu'u, Hoskins, Coleman, Van der Merwe (capt), Rogerson, Cowan, Tuisue.
Replacements: Fainga'a, Elrington, Kepu, Mafi, Donnell, Meehan, Campbell, Stokes.
Gloucester: Banahan; Rees-Zammit, Twelvetrees, Atkinson, Thorley; Cipriani, Chapman; Hohneck, Gleave, Balmain, Slater, Mostert (capt), Clarke, Ludlow, Ackermann.
Replacements: Walker, Rapava-Ruskin, Knight, Morgan, Hinkley, Varney, Evans, Seabrook.
Referee: Luke Pearce.