Ferrari's Sebastian Vettel passed the Mercedes of Valtteri Bottas to win a British Grand Prix full of action as Lewis Hamilton fought up from the back of the field to take second.
Hamilton drove superbly to recover from a first-lap collision with Vettel's team-mate Kimi Raikkonen, and the result hinged on two late-race safety cars, when world champion Hamilton's Mercedes team took a strategic gamble.
Unlike rivals Ferrari and Red Bull, Mercedes chose not to pit both their drivers for fresh tyres at the first safety car intervention.
The decision promoted Bottas, who had run second from the start, to the lead ahead of Vettel, while it gained Hamilton two places on the track, propelling him to third ahead of Red Bull's Max Verstappen and Raikkonen.
It was a gamble that paid off for the Briton - winning him crucial points in his title fight with Vettel and limiting the damage that could have been caused after the first lap - but failed with Bottas, who ran out of tyres and was passed by Vettel, Hamilton and Raikkonen before the end of the race.
Hamilton is eight points behind German Vettel in the championship, which is as tight as ever as the season approaches its halfway point.
What happened to Hamilton at the start?
In front of more than 100,000 fans at a packed Silverstone and in glorious summer weather, Hamilton's race went wrong from the start.
He had taken a superb pole position, just edging out Vettel and Raikkonen on Saturday, but had too much wheelspin off the line and immediately dropped behind Vettel and Bottas.
Coming into Turn Three, Hamilton was under pressure from Raikkonen. The Briton left the Finn a car's width of room, but Raikkonen locked a front wheel and his front left wheel slid into Hamilton's rear right, pitching the Mercedes into a spin.
The incident sent Hamilton to the back but he immediately set about picking off the backmarkers, benefiting from his car's huge pace advantage and the three DRS overtaking zones.
By lap 10, Hamilton was up to sixth place, behind the other cars from the top three teams, and he and Mercedes were starting to think about strategy.
What a comeback - but Hamilton is not happy
They delayed his first pit stop as long as possible, so he would have fresher tyres than his rivals in the closing stages.
That informed their decision as to what to do when the first safety car was called after Marcus Ericsson crashed at Abbey, the 180mph first corner.
Ferrari and Red Bull pitted their drivers but Mercedes left Bottas and Hamilton out, and the question was how the strategy would play out, with Vettel and Raikkonen on fresher 'soft' tyres pressurising the Mercedes on older 'mediums'.
A second safety car immediately after the restart from the first, caused by Carlos Sainz's Renault and Haas' Romain Grosjean colliding while trying to go side by side through the 180mph Copse corner, played into Mercedes' hands by reducing the wear on their tyres. But the gamble only half worked.
Bottas lost out but Hamilton had showed great pace before the safety car and after Vettel passed Bottas for the lead with five laps to go, Hamilton overtook his team-mate a lap later to move into second.
He was clearly upset after the race - ducking the interviews on the track and saying little in the green room before the podium.
Raikkonen, who had been given a 10-second penalty for causing the collision with Hamilton, accepted responsibility.
After being asked for his thoughts on the race while on the podium with Vettel and Raikkonen, Hamilton - while appearing to look towards the Ferrari drivers - said: "Interesting tactics I would say from this side, but we'll do what we can to fight them and improve in next races."
Aggressive Vettel will not give up
Before the safety cars, and after the collision between Hamilton and Raikkonen, Vettel had looked set for an easy win, controlling the race after taking the lead at the start.
But after losing the lead at the safety car, he had to fight to pass Bottas.
The Finn held him off for two laps after the final restart but in the end Vettel got him.
After twice failing to pass into Brooklands because of Bottas' defence, Vettel finally made the move stick with six laps to go, appearing to catch his rival by surprise with a late lunge that the Finn might have done a better job of defending.
Best of the rest
Verstappen had been on course to finish fifth, but a late-race brake problem forced the Dutchman to retire and handed the place to team-mate Ricciardo.
Renault's Nico Hulkenberg took sixth from 11th on the grid, while Force India's Esteban Ocon fended off McLaren's Fernando Alonso for much of the race to take seventh, while the Spaniard moved up from a 13th place start to eighth.
Haas' Kevin Magnussen, who Alonso passed in the closing stages, was ninth from Toro Rosso's Pierre Gasly.
The Frenchman was later handed a five-second penalty for an on-track incident with Sergio Perez. That meant he was demoted to 11th with Perez moving up to 10th.
What they said
"The safety car spiced it up," Vettel said. "In the end, I surprised Valtteri. I wasn't sure I would make the corner."
Vettel had hurt his neck in Saturday practice and was wearing heat pads on it to minimise pain, but said it had not affected him in the race.
"It was fine," he said. "The neck held up, the race was fantastic and what a great crowd. I enjoyed a lot. I think the people enjoyed a lot, what an amazing day."
Raikkonen said: "I ended up hitting Lewis in the first corner. My bad. It was my mistake. I deserve it, and I took the 10 seconds and kept fighting."
Hamilton, paying tribute to the support of the crowd said: "We'll take it on the chin and live to fight another day. I will not give up."
Driver of the day
What happens next?
After three races in a row, F1 has a weekend off, before the back-to-back German and Hungarian Grands Prix on the last two weekends in July. Hamilton will want to go into the summer break reclaiming the championship lead, but doing so will not be easy.