Left fielder Melky Cabrera chased down Chris Snyder's one-out flyball in the sixth, scurrying back to make a leaping catch at the wall. Cain raised both arms and slapped his glove in delight when Cabrera made the play.
Then, right fielder Gregor Blanco ran into deep right-center to make a diving catch on the warning track and rob Jordan Schafer for the first out of the seventh. The 27-year-old pitcher hugged Blanco in the dugout after the inning.
"Those were unbelievable catches," Cain said. "I mean that right there, that changes the whole thing."
Phillip Humber of the Chicago White Sox tossed the majors' last perfecto at Seattle on April 21. This is the second time in three years there have been two perfect games in the same season before that, the only other time it happened was in 1880.
Cain (8-2) accomplished a feat even Hall of Famers Gaylord Perry and Juan Marichal couldn't with this storied franchise.
It was the fifth no-hitter already this season, and the third in June. Johan Santana tossed the New York Mets' first no-hitter on June 1 and six Seattle pitchers shut down the Los Angeles Dodgers last Friday. Jered Weaver had one for the Los Angeles Angels on May 2.
The Astros were no-hit for the fifth time and first since Carlos Zambrano did so for the Cubs on Sept. 14, 2008.
The Giants made a big commitment to Cain this spring, locking him up for a long haul and he showed exactly why general manager Brian Sabean has vowed to keep his talented pitchers. In a week when the city's attention turned to golf and the U.S. Open, Cain delivered his most impressive gem yet in his 216th career start.
The 125 pitches were the most ever thrown in a perfect game.
The two-time All-Star who had long been the Giants starter who endured a lack of run support already was rewarded with a new $127.5 million, six-year contract in early April before the season started. This certainly meant as much or more to the homegrown pitcher.
Cain threw 86 of his pitches for strikes, faced just four full counts and still clocked 90 mph in the ninth. Cain followed up Madison Bumgarner's 12-strikeout gem in Tuesday night's 6-3 win.
It was the first no-hitter since departed left-hander Jonathan Sanchez pitched the Giants' last one on July 10, 2009, against the Padres at AT&T Park.
The Astros were no-hit by the Giants for the second time. Marichal did it on June 15, 1963.