Fulham claimed their first win over Arsenal in 40 years as the visitors never recovered from a nightmare start.
Brian McBride (left) gave Fulham an early lead
Brian McBride's header and a tap-in by Tomasz Radzinski put Fulham ahead, with Robin van Persie's free-kick being Arsenal's only first-half plus point.
In a thrilling second half, Philippe Senderos was sent off and Luis Boa Morte and Theo Walcott hit the woodwork at either end.
Jens Lehmann ended the match in attack but Fulham held on for a famous win.
After an assured start by Arsenal, McBride gave Fulham a shock lead when he headed in Claus Jensen's corner.
Mathieu Flamini could have headed the ball off the line but Lehmann's touch pushed the ball from him.
Ex-Gunner Boa Morte then increased his old team's agony as Fulham, who had lost their last two games, opened up a shock two-goal lead.
He showed deft footwork on the left before firing across an open goal to Radzinski, who tapped in his first goal of the season at the far post.
Lehmann did well to stand up to Boa Morte and deny Fulham a third as the Arsenal defence was cut to ribbons by Michael Brown's optimistic ball forward.
Van Persie's stunning free-kick after Liam Rosenior's foul on Alexander Hleb kept Arsenal in the game.
But Jensen and McBride both came close to restoring Fulham's advantage before half-time.
Arsenal showed more intent after the restart, with Thierry Henry finding the net only to be denied by an off-side flag.
Senderos' way of dealing with the ever-dangerous Boa Morte was to bring him down and earn a second yellow card.
Lehmann was left counting his blessings after seeing the resulting free-kick rattle the underside of the bar, only for Arsenal's Theo Walcott to go up the other end and hit the foot of the post.
It was then Boa Morte's turn to be denied by an off-side flag as the sides kept the pace up in a highly entertaining game.
In a frantic finale, Henry failed to connect with Justin Hoyte's cross and Lehmann went forward for a corner, but to no avail, as Arsenal suffered their third away defeat in a row.
Fulham manager Chris Coleman:
"At half time we said we can't sit back, we have to ask more questions andd take the game to them. Over the 90 minutes we deserved it.
"Arsenal are at their best when the opposition attack so we said when we do make sure we're tight at the back.
"You need a bit of luck against Arsenal and if we've had it then we earned it."
Arsenal manager Arsene Wenger:
"The game was played at a high pace, I can't fault the team but it's difficult when you're 2-0 down early on.
"We're playing many games at the moment but the team showed great spirit and reactions, we fought until the end but it just doesn't seem to be going for us at the moment.
"Of course we are down and disappointed, but it's part of your job to cope with that - if you want to play at the top level, sometimes it doesn't got your way.
"We have character and we will respond, don't worry."
Fulham: Niemi, Volz, Christanval, Knight, Rosenior, Brown, Boa Morte, Radzinski (Routledge 46), Diop, Claus Jensen, McBride (Helguson 76). Subs Not Used: Lastuvka, John, Zakuani.
Booked: Brown, Rosenior, Boa Morte, Helguson.
Goals: McBride 6, Radzinski 19.
Arsenal: Lehmann, Hoyte, Toure, Senderos, Flamini, Rosicky (Walcott 61), Song Billong (Fabregas 46), Silva, Hleb (Djourou 65), Henry, Van Persie. Subs Not Used: Almunia, Adebayor.
Sent Off: Senderos (66).
Booked: Song Billong, Senderos, Rosicky, Van Persie, Flamini.
Goals: Van Persie 36.
Ref: H Webb (S Yorkshire).