Ilkay Gundogan opened the scoring for City but two goals in two minutes from Jeffrey Schlupp and Andros Townsend sent the Eagles into a shock lead at the break, which was to by Luka Milivojevic from the penalty spot shortly after play resumed.
There were to be plenty of bitten fingernails in the away end with time ticking away as a mis-hit Kevin de Bruyne cross flew into the net with five minutes to go, but Roy Hodgson’s team clung on to record their third win in their last five outings.
Almost as was expected the early stages were one-way traffic, and indeed Palace’s first touch came after 70 seconds when Vicente Guaita tipped over a fizzing half-volley by Fabian Delph after City kept possession from kick-off. Leroy Sane then struck into the side-netting and Bernardo Silva saw a shot blocked from close range.
The ball almost seemed stuck in the Palace half and allowed for further chances as Sane saw a dipping shot held by Guaita, but on 27 minutes the Eagles’ resilience ended when the home side took the lead.
Kyle Walker switched play out to the opposite flank for Sane to find Delph, and given plenty of time the left-back whipped a fine delivery into the area that begged to be attacked. Gundogan did so and dispatched into the net with his head.
However if anyone thought that the result was merely a formality, they were truly mistaken as Hodgson’s team found themselves level on 33 minutes.
Wilfried Zaha latched onto a long ball and tricked his way past Aymeric Laporte. Possession then went through Townsend and James McArthur before finding its way to Schlupp. He took a touch to put the ball onto his left foot, and then fired accurately past Ederson’s reach into the bottom corner.
Things would get even better for the Eagles as they stunned the home crowd into silence by netting a contender for the Premier League’s Goal of the Season just two minutes later to turn the game on its head.
Patrick van Aanholt sent a free-kick into the area which was headed out by Silva, but from 30 yards Townsend wrapped his left boot around the ball and sent it dipping into the top corner to send the visiting supporters into raptures.
Shell-shocked City retreated into half-time trailing but a Pep Guardiola talk couldn’t inspire them out of their slumber, and on 51 minutes Palace incredibly found a third.
Aaron Wan-Bissaka edged down the right and put a low cross into the box which Townsend attacked with his head and struck the post, with the ball rebounding into the path of Max Meyer who was chopped down by Walker. Andre Marriner rightly pointed to the spot, allowing Milivojevic to convert from 12 yards and send his team into dreamland.
In an attempt to try and salvage something from the game, Guardiola sent on Sergio Aguero, Kevin de Bruyne and Riyad Mahrez but Palace continued to hold firm and a Gundogan blast that whistled wide was their only scare in the first half of the second 45. Hearts were however in mouths when Sane sent a free-kick over the wall on 76 minutes but saw it clatter into the post.
Fortune favoured City with five minutes to go when De Bruyne attempted to send a cross into the area which seemed to be going wide, but saw it fly over Guaita’s head instead and into the net to set up a grandstand finish, and in stoppage-time it looked set that City would equalise when another dangerous De Bruyne delivery found Gabriel Jesus unmarked in the box, but he headed a glorious chance over as the Eagles held on to a famous win.
Manchester City: Ederson, Walker, Otamendi (Aguero 50), Laporte, Stones, Delph (De Bruyne 62), B. Silva, Gundogan, Sterling (Mahrez 69), Sane, Jesus. Subs not used: Muric, Danilo, Zinchenko, Foden.
Palace: Guaita, Wan-Bissaka, Tomkins, Sakho, Van Aanholt, McArthur, Milivojevic, Schlupp, Meyer (Puncheon 90), Townsend, Zaha (Ayew 88). Subs not used: Speroni, Ward, Dann, Riedewald, Sørloth.
READ NEXT: Palace Preview: Eagles looking for second Manchester City shock.