Sebastian Vettel won the British Grand Prix for Ferrari to deny Lewis Hamilton a fifth successive home victory and move eight points clear at the top of the Formula One standings.
New Zealand's Brendon Hartley, who started in pit lane after a big crash yesterday, only lasted one lap before his Toro Rosso died and he was forced to retire.
In a race with two late safety car periods, reigning champion Hamilton went from pole position to the rear of the field before finishing second for Mercedes in a superb fightback.
The Briton appeared drained by the effort, and deeply unimpressed by a first-lap collision with Ferrari's Kimi Raikkonen that sent him spinning to the back.
Raikkonen ended up a close third, after incurring a 10-second penalty.
The win was Vettel's fourth of the season, 51st of his career, and once-dominant champions Mercedes' first defeat at Silverstone since 2012 before the V6 turbo hybrid era started.
"You're a lion," the elated team told him over the radio at the chequered flag as they celebrated Ferrari's first win in Britain since 2011.
"I was a bit concerned going into the race but I was fine, probably a bit of adrenaline," said the German, who had struggled with a neck strain on Saturday.
"The neck held up and that was a race I enjoyed a lot and I think the people enjoyed it a lot."
Hamilton was on a charge from the first lap, back up to seventh after nine laps but still 26 seconds behind his fellow four-times world champion.
The appearance of the safety car on the 33rd of 52 laps, after Sauber's Marcus Ericsson crashed at Abbey, was greeted with a huge cheer from the 140,500 crowd who had already cheered Hamilton's every overtake.
Vettel and Raikkonen pitted but Mercedes kept their drivers out, assuring Hamilton that he was "the fastest guy by miles" with everything to play for on tyres that would last the distance.
Hamilton's team mate Valtteri Bottas led and might have won but for a second safety car, after Renault's Carlos Sainz and Haas's Romain Grosjean collided, that kept the front four nose to tail and only fractions apart.
Vettel passed Bottas at Brooklands five laps from the end, with the Finn's tyres fading, and Hamilton was also through a lap later and the chase was on to the finish with the German winning by 2.2 seconds.
"This is the greatest race of the year and the greatest crowd, I am sorry I could not bring it home for you today," Hamilton told the crowd. "I will not give up, believe me, I will not give up.
"My team did an amazing job this weekend, we got so much support. Interesting tactics I would say from their side (Ferrari), but we'll do what we can to fight them."
Raikkonen held his hand up and admitted he had made a mistake.
"At the third corner I locked the wheel so I ended up hitting Lewis on the rear corner. He spun, my bad," said the 2007 world champion.
"It was my mistake. I deserved it," he added of the penalty. "I took the 10 seconds and kept fighting."
Bottas was fourth with Red Bull's Daniel Ricciardo fifth and Nico Hulkenberg sixth for Renault. Frenchman Esteban Ocon finished seventh for Force India, who are now level on points with McLaren and ahead on podiums.
Fernando Alonso was eighth for McLaren ahead of Kevin Magnussen in the Haas and Pierre Gasly taking the final point for Toro Rosso.
Monaco's Charles Leclerc had also been on course to score for Sauber but was ordered to stop after an unsafe release from the pits while in eighth place.
Dutch 20-year-old Max Verstappen, winner in Austria last weekend, retired with a brake problem while running in fifth place.