Leaders Arsenal missed a penalty and threw away a two-goal lead as they drew at West Ham in a blow to their hopes of winning the Premier League.
A close-range finish from Gabriel Jesus and Martin Odegaard's volley put the visitors 2-0 ahead inside the opening 10 minutes at London Stadium as they looked to be cruising to the victory.
But, just as they did in the 2-2 draw at Liverpool last Sunday, Mikel Arteta's side could not hold on to their advantage and dropped valuable points in their title battle with Manchester City.
Said Benrahma's penalty, after Gabriel had brought down Lucas Paqueta, gave the Hammers a way back into the game, before Arsenal got a spot-kick of their own, following Michail Antonio's handball, but Bukayo Saka shot wide.
That proved costly as the hosts scored less than three minutes later through Jarrod Bowen's superb volley from Thilo Kehrer's lofted pass.
West Ham, still 15th in the table but now four points above the relegation zone, could have won it when Antonio's header bounced off the crossbar in a frantic finish.
Arsenal began the weekend six points clear of City, but that has now been cut to four after Pep Guardiola's side won 3-1 at home against Leicester on Saturday.
The Gunners have seven matches left and play Southampton at home on Friday, before City, who have a game in hand, entertain Arsenal at Etihad Stadium on 26 April.
Gabriel Jesus' goal was his ninth in the Premier League this season and his fourth in three gamesArsenal feel the pressure after excellent start
Arsenal are now unbeaten in nine Premier League games since a 3-1 home loss to City, but Arteta will see this as two points dropped and wonder how they did not gain the victory.
Just as they did at Anfield a week ago, they missed chances to wrap up the game only to concede twice. They are wobbling in their bid to become English champions for the 14th time and the first since Arsene Wenger's 'Invincibles' went a league season without losing in 2003-04.
For the opening half-hour Arsenal's football was a joy to watch as they overpowered West Ham and looked to have wrapped up the three points with relative ease, with Jesus scoring his fourth goal in three matches before Odegaard added a second three minutes later.
Thomas Partey then sloppily lost possession to Declan Rice and that led to the penalty which gave West Ham hope and changed the course of the match.
However, even after Bowen's equaliser, Arsenal still had opportunities to get a winning goal.
Jesus narrowly missed getting a touch on Kieran Tierney's cross before two chances in the last three minutes, but Saka headed wide before Rob Holding's header was saved by ex-Gunner Lukasz Fabianski.
Slow starters West Ham show great character
This was West Ham's fifth match of nine in a congested April schedule and manager David Moyes made eight changes to the side that began Thursday's 1-1 draw at Gent in the first leg of their Europa Conference League quarter-final.
For Moyes it remains a tough task trying to balance their primary target of staying in the top flight but also progressing in European competition.
But the Scot, who appointed Arteta as his captain when the pair were together at Everton, will have been furious at yet another poor start in a home league match.
In their most recent game at London Stadium they fell 2-0 behind inside 13 minutes on their way to their heaviest defeat of the season, a 5-1 thrashing by Newcastle.
The home fans would have been fearing another heavy loss, but West Ham showed great character after conceding twice so early on.
Benrahma's penalty changed the mood at the stadium, with Antonio then having a header pushed over by Aaron Ramsdale and Paqueta firing over the bar as West Ham enjoyed their best spell at the end of the first half.
Saka's missed penalty lifted the atmosphere further, before Bowen's excellently taken volley gave West Ham fans hopes of a victory that looked impossible after 10 minutes.
This is West Ham's 11th successive season in the top flight. They have eight matches to save themselves and, despite this excellent point, remain in relegation trouble.
Antonio's 81st-minute header nearly snatched an incredible victory in a thrilling London derby, but bounced off the crossbar.
Player of the match
BenrahmaSaïd Benrahma
West Ham United
Squad number22Player nameBenrahma
Squad number9Player nameAntonio
Squad number5Player nameCoufal
Squad number11Player nameLucas Paquetá
Squad number4Player nameZouma
Squad number1Player nameFabianski
Squad number3Player nameCresswell
Squad number41Player nameRice
Squad number14Player nameCornet
Squad number12Player nameDownes
Squad number24Player nameKehrer
Squad number20Player nameBowen
Squad number8Player nameFornals
Squad number28Player nameSoucek
Line-ups
West Ham
Formation 4-3-3
1Fabianski
5Coufal4Zouma24Kehrer3Cresswell
28Soucek41Rice11Lucas Paquetá
20Bowen9Antonio22Benrahma
1Fabianski5Coufal4Zouma24Kehrer3CresswellBooked at 82mins28Soucek41Rice11Lucas PaquetáSubstituted forDownesat 87'minutes20Bowen9AntonioSubstituted forCornetat 87'minutes22BenrahmaSubstituted forFornalsat 90+1'minutesSubstitutes
2Johnson8Fornals10Lanzini12Downes13Aréola14Cornet18Ings33Emerson49AnangArsenal
Formation 4-3-3
1Ramsdale
4White16Holding6Gabriel3Tierney
8Ødegaard5Partey34Xhaka
7Saka9Gabriel Jesus11Martinelli
1Ramsdale4White16Holding6Gabriel3TierneySubstituted forFábio Vieiraat 85'minutes8ØdegaardSubstituted forNketiahat 90'minutes5ParteyBooked at 35minsSubstituted forTrossardat 67'minutes34Xhaka7Saka9Gabriel JesusBooked at 45minsSubstituted forJorginhoat 67'minutes11MartinelliSubstituted forNelsonat 85'minutesSubstitutes
10Smith Rowe14Nketiah15Kiwior19Trossard20Jorginho21Fábio Vieira24Nelson30Turner97WaltersLive Text
Match ends, West Ham United 2, Arsenal 2.
Second Half ends, West Ham United 2, Arsenal 2.
Offside, West Ham United. Pablo Fornals tries a through ball, but Maxwel Cornet is caught offside.
Corner, West Ham United. Conceded by Gabriel Magalhães.
Attempt saved. Rob Holding (Arsenal) header from the centre of the box is saved in the centre of the goal. Assisted by Fábio Vieira with a cross.
Substitution, West Ham United. Pablo Fornals replaces Saïd Benrahma.
Substitution, Arsenal. Eddie Nketiah replaces Martin Ødegaard.
Martin Ødegaard (Arsenal) wins a free kick in the attacking half.
Foul by Thilo Kehrer (West Ham United).
Fábio Vieira (Arsenal) wins a free kick in the defensive half.
Foul by Tomás Soucek (West Ham United).
Substitution, West Ham United. Maxwel Cornet replaces Michail Antonio.
Substitution, West Ham United. Flynn Downes replaces Lucas Paquetá.
Attempt missed. Bukayo Saka (Arsenal) header from the centre of the box is close, but misses to the right.
Substitution, Arsenal. Reiss Nelson replaces Gabriel Martinelli.
Substitution, Arsenal. Fábio Vieira replaces Kieran Tierney.
Aaron Cresswell (West Ham United) is shown the yellow card for a bad foul.
Michail Antonio (West Ham United) hits the right post with a header from the right side of the six yard box. Assisted by Saïd Benrahma with a cross.
Attempt blocked. Saïd Benrahma (West Ham United) right footed shot from the left side of the box is blocked. Assisted by Lucas Paquetá.
Offside, West Ham United. Saïd Benrahma tries a through ball, but Jarrod Bowen is caught offside.
Our coverage of your Premier League club is bigger and better than ever before - here's everything you need to know to make sure you never miss a moment