Vikings coach Mike Zimmer wanted to get an extended look at his first-team units, especially veteran quarterback Matt Cassel with the starting offense, during Saturday night's preseason game against the Arizona Cardinals.

He figured that the Cardinals, a team with a stout defense in 2013 that just missed out on the playoffs with a 10-6 record, would serve as a preseason litmus test for Cassel and the Vikings.

Zimmer's starters would be outscored in the first half, but behind Teddy Bridgewater, the Vikings rallied to win 30-28. While Zimmer was again noncommittal about his Week 1 starter, Cassel maintained a comfortable lead in the competition with another poised preseason performance.

"Matt's doing great. He has taken charge of the football team. But I still like to compete," Zimmer said. "They're all getting a lot of reps. … But I think Matt has a great command of the offense. He's getting better with it all the time. He's making the correct throws and he's taking care of the football. Both of them did today."

Cassel completed 12 of his 16 attempts for 153 yards and a touchdown and rushed for 30 yards on three carries. After leading the Vikings on three scoring drives, he exited the game at halftime with a 125.3 passer rating.

The Cardinals jumped out to an early 7-0 lead, but Cassel and the starters responded with a pair of scoring drives, and the veteran got them down the field not only with his arm, but his legs, as well.

After hitting Jerome Simpson on a chain-moving strike to keep the drive alive on third and long, a sea of white and red jerseys opened up for Cassel, and he scrambled down the middle of the field for a 23-yard gain.

The drive stalled inside the 10-yard line when Kyle Rudolph couldn't catch a well-placed pass in the end zone, forcing the Vikings to settle for a field goal. But the tight end would make up for it on the team's next drive.

Early in the second quarter, Cassel connected with Rudolph, who was open running a crossing pattern through the middle of the Arizona secondary. A key downfield block by rookie running back Jerick McKinnon, who had lined up on the left sideline as a wideout, cleared Rudolph's final obstacle to the end zone. The 51-yard catch-and-run gave the Vikings a 10-7 lead.

Rudolph finished with four catches for 89 yards. Both where highs among the team's starting skill position players.

While the first-team offense again looked sharp, the starters on defense did not dominate like they did in limited work a week ago during a 10-6 victory over the Oakland Raiders.

On Arizona's opening drive, Cardinals quarterback Carson Palmer completed only three of his six attempts, but each of them resulted in a first down, including a 51-yard gain by rookie wide receiver Jaron Brown on a screen play.

Cardinals running back Jonathan Dwyer later capped off the nine-play, 93-yard touchdown drive by running the ball in from a yard out. It was the first score that Zimmer's first-team defense allowed during the preseason.

Arizona regained the lead with 3:05 left in the first half. After Brown made an impressive leaping catch over Rhodes for a 35-yard gain, Cardinals quarterback Drew Stanton found tight end Daniel Fells on fourth down for a 1-yard TD reception and a 14-10 lead.

Having seen enough, Zimmer pulled his starters on both sides of the ball at halftime, with the Vikings down 14-13.

Bridgewater entered the game at the 4:47 mark of the third quarter to mild applause from the 51,763 announced fans at TCF Bank Stadium.

He led the Vikings to a field goal on his first drive and they seized a 24-21 lead on his second when he threw his first unofficial touchdown pass in the NFL to tight end Allen Reisner.

Arizona scored late to regain the lead on a bizarre fourth-and-goal play in which the snap ricocheted off quarterback Ryan Lindley. The ensuing fumble eventually made its way to running back Zach Bauman, who ran it in for a go-ahead score.

But Bridgewater drove the Vikings back down the field and hit wide receiver Rodney Smith for the winning touchdown with 18 seconds left.

"Teddy was calm. He was smart. He got a bunch of blitzes in that whole series," Zimmer said. " … He made a lot of great plays there. I thought Teddy played well tonight."

While Bridgewater, who was 16-for-20 for 177 yards and the two TDs, played better than he did during last week's uneven preseason debut, Cassel was the more polished QB in training camp and in the two preseason games.

Zimmer has yet to name a starter for the Sept. 7 season opener against the St. Louis Rams. But Cassel showed again Saturday night that he is still the best option right now.