Match ends, Crystal Palace 1, Liverpool 2.
Crystal Palace's late defeat by Liverpool felt like "groundhog day", according to Eagles manager Roy Hodgson.
Mohamed Salah's 84th minute goal snatched a victory for the Reds and left the hosts two points above the relegation zone.
Palace suffered the same fate against Manchester United earlier this month when Nemanja Matic scored in injury time to earn his side a 3-2 win.
"It's very disappointing for them to get the winning goal so close to the end of the game," said former Liverpool boss Hodgson.
Egypt international Salah took a touch before firing past keeper Wayne Hennessey after Andy Robertson had crossed in from the left.
Luka Milivojevic had converted from the spot early in the first half to give Palace the lead after Liverpool keeper Loris Karius took out Wilfried Zaha.
And Sadio Mane turned in James Milner's cross shortly after the break to level.
"It feels like a groundhog day when we play against the top teams," added Hodgson.
"In the second half we played well and controlled the ball and created better chances, but we also conceded both goals."
Liverpool had plenty of chances to score in the first half at Selhurst Park as Salah's curling effort tested Hennessey and Mane went close with two headed efforts.
Karius' early error looked costly as Palace clung on until half-time but Liverpool responded within four minutes of the restart when Milner and Robertson combined down the left to set up Mane.
Christian Benteke then missed two clear goalscoring chances in as many minutes before Patrick van Aanholt's fizzing free-kick was palmed away by Karius.
There were appeals for Mane to be shown a second yellow card - he was booked for diving in the first half - after he picked up the ball on the edge of the area but referee Neil Swarbrick settled for a free-kick.
The Reds then completed the comeback when Salah scored his 29th Premier League goal of the season - equalling the league record of scoring in 21 matches in a 38-game season.
- Relive Liverpool's late comeback
- Follow all of Saturday's Premier League games
- Listen: BBC Radio 5 live's Football Daily podcast
Salah saves Liverpool's blushes
Liverpool headed to Selhurst Park knowing they have an important week ahead.
The Reds host Manchester City in the first leg of their Champions League quarter-final on Wednesday before making the short trip to Merseyside rivals Everton in next Saturday's Premier League derby.
But Jurgen Klopp named a strong starting line-up in his 100th Premier League game in charge despite expectations he would rest several key players.
But Liverpool's first-half performance did not match the boldness of Klopp's selection as they lacked intensity and imagination against a stubborn Palace defence.
Mane's equaliser early in the second half was a good response but Benteke missed two great chances moments later to regain Palace's lead.
Liverpool had further chances and so did Palace but it was Salah who once again came to the rescue - saving the visitors' blushes.
Victory takes Liverpool up to second place in the Premier League table - at least for a few hours as Manchester United host Swansea at 15:00 BST.
More missed opportunities for Palace
Roy Hodgson's side suffered yet another defeat against a team in the top six and, having taken an early lead, this was a missed opportunity.
Palace were the better side in the first half and deserved to be in front after Zaha had won a penalty when he was clattered by Karius.
They then defended well - keeping Salah out of action and frustrating Mane.
Even after Liverpool had responded and equalised, Palace grew in confidence and started to create more in attack.
But Benteke missed two golden opportunities to regain the lead and it ultimately proved costly as Salah showed the required prolificacy at the other end.
Former Liverpool striker Benteke has missed 20 of the 22 big chances he has had in the Premier League this season, more than any other player.
Palace have now suffered five defeats in their last six games and are two points above the relegation zone - with their rivals all yet to play.
After throwing away leads against both Manchester United and Liverpool in the space of a month, Salah's late winner will come as yet another blow to the south London side.
Major blow for Adam Lallana
Adam Lallana has started just one game for Liverpool this season after struggling with injury.
He came on as a second-half substitute at Selhurst Park in the hope of gaining more match fitness following a 30-minute cameo for England on Tuesday.
But it was not what he or Klopp had hoped for when he hobbled off within three minutes of his introduction.
The 29-year-old midfielder has played just 215 minutes of Premier League football this season and now looks set to spend more time on the sidelines.
"It is not good, he is really down in the dressing room," Klopp said. "It is really difficult, whatever injury it looks like a muscle one."
'Not a Sadio Mane day' - Klopp reacts
Liverpool manager Jurgen Klopp, speaking to BBC Sport: "It is usual for us that we need to fight here, especially after a difficult start, but it makes it more special at the end. The win was deserved.
On Mane's booking for diving: "For me, it's a penalty, it's clear. He is 0.1 seconds too late going down, but it's a penalty. With contact, how can that be a dive? I spoke to the referee at half-time.
"There were a few strange situations today and Mane had to go through 80 minutes of being whistled. It was not a Sadio Mane day today. I thought he would be sent off for handling the ball. I did not understand it but am happy he didn't."
Former Liverpool midfielder Danny Murphy on Match of the Day: "I thought the referee got the decision right in not giving Mane a penalty. There was a little bit of contact but then a delay and I still think it is cheating and a dive."
Wasteful Palace - the best of the stats
- Liverpool have now won 679 top-flight away games - no side has ever won more (level with Arsenal).
- Salah has scored in 21 different Premier League games this season; a joint high for a 38-game season in the competition (Cristiano Ronaldo in 2007-08 and Robin van Persie in 2012-13).
- Salah has been involved in 38 Premier League goals this season (29 goals, nine assists), the most by any player in the competition since Luis Suarez in 2013-14 (43).
- Crystal Palace are the first team to lose three consecutive Premier League home games because of goals conceded in the final 10 minutes (88th vs Tottenham, 90th vs Man Utd and 84th vs Liverpool).
- Mane became the joint highest scoring Senegalese player in Premier League history, equalling Demba Ba's haul of 43 in the competition.
- It was also Mane's fifth Premier League strike against Crystal Palace - more than he has got against any other opponent.
- No player has won more Premier League penalties this season than Zaha (four), while Luka Milivojevic has taken (eight) and scored (seven) the most spot-kicks this season.
Man of the match - Andy Robertson
Crystal Palace travel to Bournemouth in the Premier League next Saturday (15:00 BST).
Liverpool host Manchester City in the quarter-finals of the Champions League on Wednesday (19:45 BST) before travelling to Goodison Park for the league's Merseyside derby on Saturday (12:30 BST).
- 29Wan-BissakaSubstituted forFosu-Mensahat 88'minutes
- 3van Aanholt
- 7CabayeSubstituted forLoftus-Cheekat 73'minutes
- 18McArthurBooked at 45mins
- 17BentekeBooked at 38mins
- 1KariusBooked at 12mins
- 4van Dijk
- 5WijnaldumSubstituted forLallanaat 65'minutesSubstituted forLovrenat 70'minutes
- 19ManéBooked at 24minsSubstituted forOxlade-Chamberlainat 64'minutes
- Neil Swarbrick
- Shots on Target
Second Half ends, Crystal Palace 1, Liverpool 2.
Attempt missed. Timothy Fosu-Mensah (Crystal Palace) left footed shot from outside the box misses to the right.
Substitution, Crystal Palace. Timothy Fosu-Mensah replaces Aaron Wan-Bissaka.
Corner, Crystal Palace. Conceded by Andrew Robertson.
Goal! Crystal Palace 1, Liverpool 2. Mohamed Salah (Liverpool) right footed shot from the centre of the box to the bottom left corner. Assisted by Andrew Robertson.
Attempt missed. Trent Alexander-Arnold (Liverpool) right footed shot from outside the box is too high. Assisted by Alex Oxlade-Chamberlain.
Corner, Liverpool. Conceded by Aaron Wan-Bissaka.
Corner, Crystal Palace. Conceded by Andrew Robertson.
Foul by Jordan Henderson (Liverpool).
Ruben Loftus-Cheek (Crystal Palace) wins a free kick on the right wing.
Substitution, Crystal Palace. Ruben Loftus-Cheek replaces Yohan Cabaye.
Substitution, Liverpool. Dejan Lovren replaces Adam Lallana because of an injury.
Delay over. They are ready to continue.
Delay in match Adam Lallana (Liverpool) because of an injury.
Substitution, Liverpool. Adam Lallana replaces Georginio Wijnaldum.
Substitution, Liverpool. Alex Oxlade-Chamberlain replaces Sadio Mané.
Roberto Firmino (Liverpool) wins a free kick in the defensive half.
Foul by Yohan Cabaye (Crystal Palace).
Corner, Crystal Palace. Conceded by Loris Karius.
Liverpool would have lost a game like this in previous seasons but we have a real backbone now and going behind no longer means defeat.
I still have concerns about Matip and the defence needs more help but roll on Tuesday!!
What a player, a joy to watch for any neutral fan and young kids wanting to learn about hard work and honesty.
Good game. Liverpool & Salah onwards and upwards..!!
Maybe Mane should have walked..... but you weren’t complaining about useless decisions at OT a few weeks ago.
By the way, I hope Palace stay up cos they are good to watch and the fans are fantastic. No designated singing sections at Selhurst 😂😂😂😂😂