Unsurprisingly, the determined hosts started strongly, as Ousmane Dembele curled a couple of efforts just wide of the post.
However, Le Havre stunned the Parc des Princes against the run of play, as Christopher Operi converted their first shot on target. He struck Emmanuel Sabbi’s pass first-time into the bottom corner, silencing the home faithful.
That seemed to give PSG a new lease of life, as Bradley Barcola tapped home Warren Zaire-Emery’s cross at the back post to bring them back level.
However, Le Havre managed to strike again before half-time, when veteran Andre Ayew beat Keylor Navas at his near post after collecting a lovely backheel pass from Loic Nego.
PSG went into the second half behind, and so it was no surprise to see Kylian Mbappe brought on straight away.
However, before he could make any impact, Le Havre were awarded a penalty after a VAR check, as Danilo Pereira was adjudged to have fouled Nego.
Isaak Toure stepped up and sent Navas the wrong way, giving the visitors a shock two-goal cushion.
The Parisians pushed late on and did pull one back through Achraf Hakimi, who tucked the ball under Arthur Desmas after being put through by substitute Goncalo Ramos.
The striker then had a golden opportunity to level proceedings, but his delicate chip was well-saved by Desmas from close range, although replays showed Ramos was marginally offside.
He was not to be denied again, however, as he headed home deep into stoppage time to extend PSG’s unbeaten league run to 26 matches.
It means, mathematically, the Parisians have not won the title yet, but given their vastly superior goal difference over Monaco, they can start to pop the champagne corks.