Nicolò Zaniolo struck twice to give Roma the advantage but Adrián López's reply leaves the tie delicately poised.
Article top media content
All you need to know in 60 seconds ...
Roma will take a slender lead to Portugal thanks to two goals in seven minutes from their 19-year-old sensation Nicolò Zaniolo, though Adrián López's response gives Porto cause for optimism.
Opportunities were at a premium in the first hour of the contest, Edin Džeko rifling against the post for Roma in the 37th minute and Danilo heading just wide for Porto after the interval.
The home side finally broke through when Džeko's cushioned lay-off allowed Zaniolo to drill in his first UEFA Champions League goal, and another swiftly followed when the Bosnian's drive came back off the post to the youngster.
Porto's chances of turning the tie around received a huge boost in the 79th minute, though, as Francisco Soares' sliced effort fell perfectly for López to fire past Antonio Mirante.
View from the stadium: Ben Gladwell
For 70 minutes, this match was not going to stick in the memories of a sizeable crowd inside the Stadio Olimpico. But now it will go down as the night Tuscan teenager Zaniolo scored his first UEFA Champions League goals, and how important they may prove to be.
His first sparked a rather placid, cautious game into life and his second brought the house down. However, Porto's fans rediscovered their voices late on with an away goal which leaves this tie finely poised at the midway stage.
Man of the match: Nicolò Zaniolo
The 19-year-old confirmed himself as the new prince of Roma. He played with his heart on his sleeve, working hard on the wing both defensively and in attack, creating opportunities for Bryan Cristante and Lorenzo Pellegrini before bagging his first UEFA Champions League goals. He was deserving of his glory, his class and composure evident in how he was in the right place at the right time to score on both occasions.
- Nicolò Zaniolo (19 years, 225 days) is the second youngest Italian player to score in the UEFA Champions League after Mario Balotelli.
- Zaniolo is the youngest Italian player to score twice in a UEFA Champions League game.
- Roma have recorded their fourth successive home win in the UEFA Champions League knockout rounds.
- Porto have not won in six UEFA Champions League knockout matches, drawing one and losing five.
What does it mean?
Statistics suggest this tie could hardly be more balanced heading to Portugal. In all previous European Cup/UEFA Champions League knockout ties when the home side have won 2-1 in the first leg, 90 have gone through while 89 have been eliminated in the return. Roma contributed to those numbers at this point last season, losing 2-1 at Shakhtar Donetsk before winning the second leg 1-0.
Roma: The Italian team, fifth in Serie A, host Bologna on Monday night before travelling to Frosinone. Then, on 2 March, it's the Rome derby against Lazio at the Olimpico – just four days before the return against Porto.
Porto: The Liga leaders entertain Vitória FC on Saturday before a trip to Tondela. Two huge home games follow: the Portuguese Cup semi-final first leg against Braga, then a league showdown with Benfica on 3 March.