Southampton 2
Bristol City 0
Stern John halted Bristol City's promotion charge as the league leaders again showed that calling the Championship race is as tough as picking the winner in the Grand National.
John rifled in his 17th goal of the season to hand lowly Southampton a surprise relegation lifeline.
Gary Johnson's inconsistent City now face a crucial double-header against top six rivals Wolves and Stoke to decide if they can last the course.
Saints started 24 points and 21 places below their opponents but it was difficult to tell which was the team gunning for the title and which side are fighting for their lives.
The home outfit dominated from the first minute and could have been 3-0 up before John's scrappy opener 10 minutes before half-time.
The Trinidadian should have opened the scoring after only two minutes when he was presented with a free header from Mario Licka's cross but nodded wide from two yards.
City goalkeeper Adriano Basso made his first save of a busy afternoon to keep out Inigo Idiakez's fourth-minute free-kick.
John passed up another gilt-edged chance seven minutes later when he brilliantly controlled Gregory Vignal's raking cross-field pass but then fluffed his shot, sending it wide from eight yards.
The Robins had another massive let-off in the 20th minute when Idiakez put a free header wide after Jermaine Wright had whipped in a teasing centre.
It took until the 32nd minute for City to reward their 3,200 travelling army with their first shot in anger when Michael McIndoe put a long-ranger wide.
John made amends for his earlier blunders by finally giving Saints a lead they fully deserved three minutes later.
Jason Euell's cross was only half cleared and Bradley Wright-Phillips rose above Jamie McCombe to nod the ball into John's path. The former Sunderland man lashed it home.
John was denied his second goal by a dubious offside flag in the 39th minute before Scott Murray headed into the arms of Southampton keeper Richard Wright with the visitors' first shot on target.
The Robins made more of a fight of it in the second period but Brazilian Basso was still the busier of the two keepers.
Southampton midfielder Licka thought he had put the game beyond City's reach in the 69th minute with a back-post volley from 12 yards - only for Basso to tip it wide. Basso then produced two stunning saves in the space of a minute to deny Wright-Phillips a goal.
First he came racing out to save at the striker's feet and then he flung himself off his line to turn a 20-yard piledriver past the right post.
Any hopes City had of snatching a late equaliser were dashed when Euell grabbed Southampton's second five minutes from time with a two-yard tap-in after Basso could only parry Wright-Phillip's shot to his feet.
Southampton: R Wright 6 - J Wright 6, Lucketti 7, Perry 7, Vignal 6 (Surman, 42mins, 6) - Licka 7, Safri 7, Idiakez 7 (Viafara, 69mins, 5), Euell 7 - *WRIGHT-PHILLIPS 8, John 7 (Pericard, 69mins, 5).
Bristol City: *BASSO 9 - Orr 6, McCombe 3, Carey 5, McAllister 5 - Murray 6 (Sproule, 45mins, 6), Johnson 5, Noble 4 (Brooker 45mins, 6), McIndoe 6 - Skuse 5 (Elliott, 77mins) Adebola 5.
Ref: S Attwell 6.