Chris Froome will carry a lead of two minutes 38 seconds into the final competitive Tour de France stage after tracking Nairo Quintana's late attack to finish third.
Colombian Quintana came second after moving clear of the Briton on stage 19's last climb to cut the gap by 32 seconds in a bid for the yellow jersey.
Defending champion Vincenzo Nibali rode clear to win the stage.
Froome's Team Sky team-mate Geraint Thomas finished well behind the pack.
The Welshman began the 138km-route from Saint-Jean-de-Maurienne to La Toussuire fourth overall but slid down to 15th as he came home 22 minutes adrift. The effects of his previous hard work and a crash on stage 16 caught up with him.
A relatively short but gruelling final day in the mountains remains on Saturday - culminating in the fabled climb to Alpe d'Huez - before Sunday's procession to the sprint around the Champs-Elysees in Paris.
Nibali moves as Froome stops
Nibali broke off the front of the main pack on the Col de la Croix de Fer - 59km from home.
Froome had come to a momentary standstill on the side of the road to remove a stone caught in his brake calliper, as the Italian climbed out of the saddle to ride clear.
It is against the race's traditions to deliberately exploit a rival's mechanical misfortunes and Nibali said that he had not seen Froome slowing to a stop behind him.
Television replays showed Nibali twice glancing over his shoulder before accelerating away.
"I told him exactly what I thought of him," said Froome afterwards.
"I heard other riders could see that he turned around and then decided to attack.
"That's not in the spirit of the Tour de France and it's definitely not what this race is about."
Nibali said: "I won't repeat what he said to me, it was very harsh and unfair.
"He was very angry with me but I didn't understand what his problem was. Today the race was on, I didn't know he'd had a problem."
Can Froome be caught?
Tomorrow's stage offers opportunities for Quintana to test Froome's climbing abilities once again with a return up Col de la Croix de Fer before the final ascent to Alpe d'Huez.
Froome's Team Sky team-mates drifted away during stage 19; Richie Porte, like Thomas, dropped off as an early injection of pace proved too much for their tiring legs.
Dutchman Wout Poels did a fine solo job escorting Froome through the majority of the stage, and although he drifted on the final climb to La Toussuire, he will be required to do something similar on Saturday.
"It was a massive day. From the word go the racing was on," Froome told ITV4.
"All in all it was a good day to be able to tick it off with one day of racing left. Quintana put in a big attack and I opted to limit my losses and keep a bit of energy.
"Tomorrow will be full on. I'm looking forward to Alp d'Huez. It would be a dream to win there but I have to keep up with the Colombian first."
|Analysis: Rob Hayles on BBC Radio 5 live sports extra|
|"I don't think the race is over and done yet. Quintana had to wait and made the best of what he could.|
|"Is it enough? Chris Froome is certainly going to have to be isolated very early and will have to have a bad day.|
|"Up to now he hasn't really had that. It will be very difficult for Nairo Quintana, although he is the only rider I feel that can take the yellow jersey from Froome."|
|Listen to the latest BeSpoke podcast from the Tour|
General classification after stage 19
1. Chris Froome (GB) Team Sky 78hrs 37mins 34secs
2. Nairo Quintana (Colombia) Movistar +2mins 38secs
3. Alejandro Valverde (Spain) Movistar +5mins 25secs
4. Vincenzo Nibali (Italy) Astana +6mins 44secs
5. Alberto Contador (Spain) Tinkoff - Saxo +7mins 56secs
6. Robert Gesink (Netherlands) LottoNL +8mins 55secs
7. Mathias Frank (Switzerland) IAM Cycling +12mins 39secs
8. Bauke Mollema (Netherlands) Trek +13mins 22secs
9. Romain Bardet (France) AG2R +14mins 8secs
10. Pierre Rolland (France) Europacar +17mins 27secs