Efter en inledning av böljande spel öppnade Franck Ribéry målskyttet i den 25:e matchminuten. Fransosen tog sig skickligt inåt i banan och avlossade ett välplacerat skott till höger om Thomas Strakosha Lazio-målet.
Under den återstående tiden av den första halvleken hade bägge lagen ett mindre antal chanser. Den bästa av dessa hade hemmalagets Marco Parolo i samband med en hörna, men italienarens nickavslut missade målet och den första halvleken slutade med bortaledning, 1-0.
Några minuter in i den andra halvleken var Fiorentina mycket nära att utöka sin ledning. En listig lyftning från Rachid Ghezzal gick över hemmakeepern, men studsade i ribban.
20 minuter senare, i den 67:e minuten, kom istället utjämningen. Efter att Fiorentina-keepern Dragowski fällt Felipe Caicedo pekade domaren på straffpunkten. Från elva meter var därefter skyttekungen Ciro Immobile stensäker när han rullade in 1-1 till höger om polacken.
Drygt tio minuter från slutet kom nästa Lazio-mål. Hemmalaget kontrade effektivt och Luis Alberto avslutade anfallet genom att snyggt placera in 2-1, vilket blev matchens sista fullträff.
I och med segern tar Lazio upp kampen på nytt med Juventus om ligatiteln. För närvarande skiljer det fyra poäng mellan lagen.
I nästa ligaomgång ställs Lazio mot Torino på bortaplan. Fiorentina möter Sassuolo hemma på Stadio Artemio Franchi.
Startelvor:
Lazio: Strakosha - Gabarron, Acerbi, Bastos - Lazzari, Milinković-Savić, Parolo, Alberto, Jony - Caicedo, Immobile.
Fiorentina: Dragowski - Milenkovic, Pezzella, Ceccherini - Lirola, Duncan, Pulgar, Castrovilli, Igor - Ribéry, Cutrone.