The visitors took an early lead with an impressive strike from Hulk, before Oscar Cardozo turned the score around with two goals either side of the break. Substitute James Rodriguez restored parity once again, before Maicon's header gave Porto the three points.
A rampant start from Porto saw the visitors take the lead just seven minutes into the game. Pablo Aimar was dispossessed in his own half as the team tried to set up a counter attack after a corner, and Hulk picked up the ball on the right flank. The Brazilian forward cut inside and fired an incredibly powerful left-foot drive past Artur from the edge of the box.
Benfica were being punished for their slow approach to the game: Axel Witsel was playing too close to Javi Garcia, but Aimar remained near Oscar Cardozo further up the field, creating a gap between midfield and attack which no one seemed interested in filling.
The hosts created danger for the first time in the 22nd minute, when Gaitan delivered a superb pass into the box for Cardozo. The Paraguayan had only the Helton to beat, but his tame shot from point-blank range was easily stopped by the goalkeeper.
Porto almost doubled their lead in the 35th minute, when Nicolas Otamendi, with plenty of room to operate in the middle, picked out a pass to Lucho Gonzalez, who played a through ball to Marc Janko. An on-rushing Artur flung himself at the Austrian’s feet, blocking his shot, before saving Alvaro Pereira’s rebound.
Benfica's equalizer came three minutes before half-time, when Maxi Pereira tried his luck from outside the 18-yard box after a corner kick. The Uruguayan's shot was deflected by Axel Witsel and the ball fell into the path of Cardozo, who fired home to redeem himself after his earlier mistake.
The hosts had looked more composed in possession since suffering the goal, while Porto, in contrast, looked drained of the confidence that had characterised their performance in the opening quarter.
The second half began with Benfica the brighter, and the home side took the lead in the 48th minute, as Cardozo escaped his marker to head home after Aimar had whipped in a free-kick from the right.
Benfica were now in control of the game, but Porto hit them on the counter in the 64th minute. Gaitan lost the ball and Fernando exchanged passes with James Rodriguez before the Colombian winger sent the ball bast Artur inside the box.
Things then went downhill for Benfica, who were reduced to 10 men after Emerson saw his second yellow of the night for a foul on Hulk.
Coach Jorge Jesus put Gaitan at left-back and will certainly regret that decision, as the Argentine made the foul which gave Porto the chance to retake the lead in the 87th minute. James Rodriguez sent the free-kick into the box, where Maicon rose higher than Artur to head the ball home.
The victory sees Porto move three points clear at the top of the table, while Benfica remain second, but the latter could be caught by Sporting Braga, who visit CD Nacional on Sunday.
How do you stay up to date with football when on the move? With http://m.goal.com – your best source for mobile coverage of the beautiful game.