Match ends, Rangers 1, St. Johnstone 3.
Rangers' 11-game winning run was ended as St Johnstone reached the League Cup quarter-finals.
St Johnstone striker Michael O'Halloran created the first goal for Murray Davidson and the former put the result beyond doubt, racing clear to score the third goal early in the second half.
And Simon Lappin fired in a superb strike in between.
Defender James Tavernier scored a consolation for Rangers, his seventh goal of the season.
St Johnstone had a cause to rail against. The bookmakers made Championship leaders Rangers favourites to win this tie, but the top-flight visitors set out to dismiss that assumption with a sharp, gritty intent.
There was clarity of purpose, too, as Saints boss Tommy Wright devised a plan that was well executed.
His approach worked in two critical ways. O'Halloran and Steven MacLean hared around up front, hassling defenders when they were on the ball to prevent the home side building passages of play.
Whenever Rangers did cross the halfway line, St Johnstone's two banks of four closed up tight, so there was no space to pass through or over them.
In the final third, Rangers like to slip little passes around the edge of the box probing for an opening but St Johnstone were too wily and organised to be caught out.
There was also shrewdness in attack from the Perth side, with O'Halloran a very quick and direct runner, always peeling into the wide open spaces behind Rangers' two attacking full-backs.
The visitors first threatened after just four minutes. A throw-in was cleared to the edge of the penalty area and Lappin met it with a volley that the goalkeeper Wes Foderingham had to push away.
The breakthrough, inevitably, involved O'Halloran. He burst into space down the right, dribbled the ball to the byeline then cut it back to MacLean, who in turn flicked it on with the outside of his foot for Davidson to score from close range.
St Johnstone should have scored again when O'Halloran crossed to MacLean at the back post, but the striker somehow managed to lift his shot over from only a few yards out. The home side had been robbed of possession in their own half during the build up.
Gideon Zelalem sent a shot wide and Kenny Miller saw an effort saved, but Rangers' attacking ambition was suppressed by St Johnstone.
There was further reward for Saints when a corner was played out to Lappin on the edge of the area and he swept it first-time low and hard into the far corner.
Rangers have been open and dynamic all season but the former quality leaves them vulnerable and they left themselves exposed. St Johnstone played on that with expertise but another recurring flaw undermined Mark Warburton's side.
Just after half-time, a simple hooked ball upfield dropped between the two centre-backs but they failed to deal with it as O'Halloran raced between them before clipping the ball past Foderingham.
As St Johnstone's work-rate dropped, Rangers found greater purpose. Nathan Oduwa skipped in from the left, past two defenders, then skelped a shot off the crossbar. Tavernier then did the same on the right, but finished by rifling the ball high into the net.
The goal enthused the home fans but St Johnstone held their nerve. Rangers had no options to change their approach and the visitors had managed the game expertly throughout. They simply continued that, although with less threat going forward.
This was a reminder of the tactical and organisational nous of Wright and the extent of the work that remains to be done by Warburton. Rangers have not met a side of this hardiness or cleverness in the Championship and the hosts ran aground.
- 2TavernierBooked at 82mins
- 8ZelalemSubstituted forMcKayat 75'minutes
- 16HallidaySubstituted forLawat 75'minutes
- 23HoltSubstituted forShielsat 53'minutes
- 14ShaughnessyBooked at 69mins
- 3ScobbieBooked at 64mins
- 4LappinBooked at 38minsSubstituted forCraigat 67'minutes
- 29O'HalloranSubstituted forCumminsat 73'minutes
- Kevin Clancy
- Shots on Target
Second Half ends, Rangers 1, St. Johnstone 3.
Corner, Rangers. Conceded by Murray Davidson.
Rob Kiernan (Rangers) wins a free kick on the left wing.
Foul by Steven MacLean (St. Johnstone).
Dean Shiels (Rangers) wins a free kick in the attacking half.
Foul by Steven MacLean (St. Johnstone).
Attempt missed. Graham Cummins (St. Johnstone) header from the centre of the box is close, but misses to the right.
James Tavernier (Rangers) wins a free kick in the defensive half.
Foul by Liam Craig (St. Johnstone).
James Tavernier (Rangers) wins a free kick in the attacking half.
Foul by Brian Easton (St. Johnstone).
James Tavernier (Rangers) is shown the yellow card for a bad foul.
Foul by James Tavernier (Rangers).
Liam Craig (St. Johnstone) wins a free kick in the attacking half.
Dean Shiels (Rangers) wins a free kick in the defensive half.
Foul by Graham Cummins (St. Johnstone).
Foul by Nicky Law (Rangers).
Murray Davidson (St. Johnstone) wins a free kick in the attacking half.
Attempt blocked. Nicky Law (Rangers) left footed shot from the centre of the box is blocked.