UEFA Champions League: Porto 3 Bayern Munich 1
Bayern, winners in 2013, came into Wednesday's clash at the Estadio do Dragao as favourites, but a trio of mistakes at the back leaves them with it all to do at the Allianz Arena next week.
In a dramatic start to proceedings, Ricardo Quaresma took full advantage of two glaring errors from Bayern in the opening 10 minutes, first converting from the penalty spot after Jackson Martinez had dispossessed Xabi Alonso and then been felled by Manuel Neuer inside the box.
Quaresma then robbed Dante and produced a calm finish to double his tally and leave visiting coach Pep Guardiola standing aghast on the touchline.
Bayern, missing the likes of Franck Ribery, Bastian Schweinsteiger and Arjen Robben, got themselves back into the tie shortly before the half-hour when Thiago Alcantara scored his first goal since February 2014 with a close-range finish.
But Jerome Boateng's second-half lapse in judgement afforded Martinez - back after over a month out with a groin problem - the opportunity to net his seventh Champions League goal of the campaign, leaving Bayern facing an uphill challenge in the second leg.
Porto took the lead in the third minute after Martinez robbed Alonso on the edge of the area and then went down under Neuer's sliding challenge.
The goalkeeper was booked despite appearing to get a touch on the ball and Quaresma sent him the wrong way from the spot.
Robert Lewandowski headed over as Bayern almost found an equaliser, only for another defensive slip in the 10th minute to allow Porto in for their second.
Dante miscontrolled to leave Quaresma with a free run on goal and he coolly slotted past Neuer with the outside of his right boot.
A stunned Bayern slowly regained their composure and, after a period of sustained pressure, got their reward in the 28th minute when Thiago converted Boateng's low cross at the back post.
Neuer almost suffered further embarrassment six minutes later when he fumbled Alex Sandro's cross onto the crossbar, before gathering at the second attempt.
The Germany keeper excelled himself 12 minutes into the second half, though, producing a superb reaction save to keep out Boateng's deflection from close range.
But there was little he could do in the 65th minute as Boateng misjudged the flight of the ball, allowing Martinez to control, round Neuer and slot home.
Porto held on to their two-goal advantage in the final stages in a performance that was only soured by cautions for Sandro and Danilo, ruling them out of next Tuesday's return leg.
Bayern, meanwhile, will hope to have at least Schweinsteiger and Ribery back for that fixture as they aim to overturn the deficit following their first defeat on Portuguese soil.