GLENDALE, Ariz. -- The Arizona Cardinals' passing game was nearly perfect in the first half. Houston's was just as good in the second.
In the end, it was the Cardinals' defense -- torn apart by the Texans' Matt Schaub most of the final two quarters -- that made the game-saving plays Sunday as Arizona eked out a 28-21 victory.
Dominique Rodgers-Cromartie, playing with a fractured right index finger, returned an interception 49 yards for a touchdown, high-stepping the final 20, to put Arizona back in the lead with 2:20 to go after Schaub had rallied Houston from a 21-0 halftime deficit.
The Cardinals held three times at their 1-yard line in the final minute to preserve the victory.
"The defense bailed us out," said Arizona's Larry Fitzgerald, who caught two touchdown passes late in the first half. "We're just glad those guys came to our rescue."
Schaub had completed 11 straight when Rodgers-Cromartie stepped in front of intended receiver Kevin Walter.
The young Cardinals cornerback intercepted, raced down the sideline, then high-stepped the final 20 yards for the score.
"It's a play that I'll run back in my head for the next week," Schaub said, "until I get a chance to go back and make it better."
A 60-yard kickoff return by Andre' Davis helped set up the final Houston threat. Schaub quickly moved the team to the 1, but Chris Brown was stopped on second down, there was an incomplete pass on third and Brown was stopped again on fourth down with 40 seconds left.
"When we got to the 1 we should have scored on the second play. We should have scored on the pass and on the last run," Houston coach Gary Kubiak. "We have to be good enough to make a yard in the National Football League when it counts and we didn't."
Kurt Warner topped 300 yards passing for the 50th time in his career but he and the Arizona offense struggled after a near-perfect first half.
Warner completed 26 of 38 passes for 302 yards, but almost all of them came in the first half. In the first two quarters, the 38-year-old quarterback was 20 of 23 for 262 yards, including a pair of touchdown passes to Fitzgerald in the final 1:44 to give Arizona a 21-0 lead at the break.
He went 9 of 9 on those final two scoring drives.
Arizona had 18 first downs in the first half and one in the second. Houston had five first downs in the first half and 18 in the second.
"Guys stepped up and made plays at the end. You leave with a good feeling in your mouth," Warner said. "But it shouldn't have been that close. We had too many opportunities that we left out there that kind of leaves me a little frustrated that that game ended the way it did, even though you're happy to walk out of here and have it go in your favor."
The Texans felt the same way, only in reverse order.
"We didn't do nothing in the first half of the game," Houston's Andre Johnson said. "We battled back but maybe if we scored some points in the first half we would have won the game."
Schaub set franchise records for completions and attempts, going 35 for 50 for 371 yards. In the second half, he was 25 of 32 for 279 yards. He threw two touchdowns to Johnson. The second, with the big receiver bowling over three defenders on a 17-yard scoring play, tied it at 21 with 6:59 still to play.
"He's a scary player," Arizona coach Ken Whisenhunt said.
The Cardinals (2-2) couldn't move after that, but they pinned Houston (2-3) on its 11-yard line. The Texans methodically advanced to their 47, and on third-and-7, Schaub threw to the sideline toward Walter. Rodgers-Cromartie got there first and there was no one who could stop him, even though he high-stepped nearly the final half of the way.
"Once I got it in my hands, the first thing I was thinking about was which celebration I should do," Rodgers-Cromartie said.
Houston seemed destined to tie it again when Schaub's 5-yard shovel pass to Steve Slaton made it second-and-goal at the 1. Brown was stopped just inside the 1, then on a play action pass, Schaub threw too high to Joel Dressen, who was open in the back of the end zone.
That made it fourth down, and with the noisy home crowd at its loudest, Brown again failed to make it to the goal line.
"We just looked at each other and said 'Man, this is it,'" defensive tackle Darnell Dockett said. "We can either make this game hard and go to overtime or we can just put this thing away right now."
Schaub thought Brown got in on the final try.
"But they called it the other way and obviously on a replay like that, the call on the field is confirmed," Schaub said.
Houston was 6-2 against the NFC the past two seasons. ... Warner passed 13,000 yards passing with the Cardinals, making him the second quarterback to do so with two different teams. The other was Fran Tarkenton. ... Arizona's 6-foot-8 Calais Campbell blocked a field goal try for the second time this season. ... The same officiating crew worked the game as did Arizona's game against San Francisco last season, which ended exactly the same way in the same end zone.