Norris wins Dutch Grand Prix to end Verstappen's unbeaten home record
Red Bull's triple world champion finished 22.896 seconds behind, after seizing the lead at the start but being passed on the 18th of 72 laps, with Ferrari's Charles Leclerc taking the chequered flag in third place.
It was the first time since the race returned to the calendar in 2021 that Verstappen had not triumphed at Zandvoort and extended his losing streak this season to five races.
His lead over Norris was cut to 70 points after 15 of a record 24 rounds, with McLaren also cutting Red Bull's increasingly vulnerable advantage in the constructors' championship to 30.
"It feels amazing. I wouldn't say a perfect race because of lap one again, but it was still beautiful. The pace was strong, the car was unbelievable," said Norris, who took his first win in Miami in May.
"I could push and get past Max. It was a straightforward race. Tough but enjoyable."
Norris had started on pole position for the fourth time in his career and Sunday's race on the breezy Dutch coast, in front of his rival's Orange Army of fans, was the first time he had converted the advantage into victory.
It looked at the start that he might have thrown it away once again, the Briton making a sluggish start off the line as Verstappen hit the throttle and led decisively into turn one.
The McLaren clearly had the pace as well as the drag reduction (DRS) advantage, however, and after one probing attempt on lap 17, Norris went past down the inside at turn one and pulled steadily away.
Norris also took a bonus point for fastest lap with a final flourish and was voted Driver of the Day by fans.
"You always hope to do better. We had a good start and tried everything we could but it was clear we were not quick enough," said Verstappen.
Norris's teammate Oscar Piastri was fourth, ahead of Ferrari's Carlos Sainz with Red Bull's Sergio Perez sixth.
The Mercedes pair of George Russell and Lewis Hamilton finished seventh and eighth with Alpine's Pierre Gasly ninth - and lapped - and Fernando Alonso taking the final point for Aston Martin.