In a game that featured nine field goals -- five by the 49ers and four by the Cardinals -- it figured that only a touchdown would settle things.
Fitzgerald leaped high to haul in the scoring pass and made sure he didn't drop it.
The scoring drive covered 75 yards on seven plays.
San Francisco kicker Robbie Gould was 5-for-5 on field-goal attempts, including a 23-yarder with 2:24 left in overtime that gave the 49ers a 15-12 lead. He also connected from 49, 39, 47 and 48 yards.
Phil Dawson was 4-for-4 against his former team, hitting from 29, 43, 50 and 32 yards.
The 49ers, who entered the game with just three quarterback sacks in their first three games, got to Palmer six times, including four times during the fourth quarter. Palmer has now been sacked 17 times this season and, playing behind a rickety offensive line, has been hit more than any other quarterback in the league (43 times).
Elvis Dumervil had two of the sacks, giving him 101 in his career.
Palmer finished the game completing 33 of 51 passes for 357 yards with one touchdown and one interception.
San Francisco quarterback Brian Hoyer was 24 of 49 for 234 yards with no touchdowns and one interception.
The score was tied at 6 at halftime, although the Cardinals felt they should have scored at least two touchdowns and had the upper hand.
The Cardinals won the coin flip, chose to receive and marched the ball down to the 49ers' 4-yard line only to see Palmer force a throw into the end zone while under duress.
Linebacker Ray-Ray Armstrong picked it off for a touchback, ruining any chance at points for Arizona.
The Cardinals were driving with ease on their third possession as well and thought they had a touchdown when Palmer connected with Andre Ellington in the end zone on a back-shoulder pass.
Upon further review, however, the play was ruled an incomplete pass as it was determined Ellington was unable to gain full control of the ball. The Cardinals had to settle for a 29-yard field goal from Dawson.
That kick was sandwiched around two field goals by Gould of 49 and 39 yards.
An Antoine Bethea interception of a Hoyer pass and subsequent 16-yard return enabled the Cardinals to get into scoring position yet again just before the end of the half. But once again, all they could get was a field goal - this time a 43-yarder from Dawson.
Each team lost a starter during the game. Cardinals outside linebacker Markus Golden, who led the team with 12.5 sacks last season, injured his right knee while rushing the passer in overtime and had to be helped off the field. San Francisco receiver Marquise Goodwin, meanwhile, suffered a head and eye injury during the first quarter and did not return.
NOTES: Cardinals CB Patrick Peterson played in his 100th career NFL game. He has started all 100 of them. ... The 49ers played without two starters on defense, S Eric Reed (knee) and rookie LB Reuben Foster (ankle). ... Cardinals LB Karlos Dansby appeared in his 200th NFL game. Among active defenders, only Julius Peppers (238), Terence Newman (209) and Terrell Suggs (201) have played in more games. ... San Francisco RB Carlos Hyde's 12 receptions through the first three games were the most by a 49ers running back since Frank Gore had 22 during the first three games of the 2010 season. Hyde had five more catches Sunday.