Baltimore (2-6) got only 49 yards rushing from Jamal Lewis, averaged 4.1 yards per play and managed only three field goals by Matt Stover.
"I can do the math. You can't trade sevens for three, plain and simple," Ravens coach Brian Billick said. "If you get an opportunity to score or stop them, you can't trade touchdowns for field goals, and that's what we did today."
"I'm happy where we are at 7-2," Cincinnati coach Marvin Lewis said. "I don't think we had any major injuries today. When we come out of the bye, it looks like we should be at full strength."
Cincinnati was nursing a 14-6 lead before Palmer capped the 91-yard drive with a 3-yard TD pass to Chris Henry with 6:05 to go. That was enough of a cushion to dispatch the Ravens, who haven't scored more than 19 points in any game this season.
Lewis averaged 3.3 yards per carry and Anthony Wright averaged just eight yards per completion for the Ravens. It was the first time in eight games against Cincinnati that Lewis failed to run for at least 100 yards.
"We didn't make up any special recipes or do any witchcraft before the game," Bengals linebacker Brian Simmons said. "Guys just went out there and played team ball."
Wright went 19 for 30 for 153 yards, and the Ravens' flickering playoff hopes took another hit. Baltimore's 2-6 start is the worst in franchise history, matching the mark of the 1998 team.
Wright left the game in the third quarter with an injured left ankle after being tackled by John Thornton. Kordell Stewart came in and revived the Baltimore offense, running four times for 23 yards on a 13-play drive and even going out for a pass on a trick play.
The throw to Stewart, from wide receiver Randy Hymes, ticked off the quarterback's fingertips. Minutes later, Stover kicked a 31-yard field goal to bring Baltimore to 14-9 with 12:46 left.
But Palmer answered with a 12-play march that included a 48-yard pass to Chad Johnson.
"That says a lot about this team and its offense," said Palmer, who went 19 for 26 for 248 yards. "We answer when we need to, even if it's not always perfect and not always pretty."
An inadvertent referee's whistle cost Baltimore an apparent touchdown early in the third quarter with Cincinnati holding a 14-6 lead. Bengals tight end Matt Schobel fumbled when hit by Adalius Thomas, and Will Demps picked up the ball and went the distance.
But officials ruled the play dead as Demps picked up the ball at the Baltimore 42, and the Ravens went nowhere before punting.
"It was an error," referee Jeff Triplette said of the quick whistle. "By rule, there is nothing we can do."
Baltimore outgained Cincinnati 160-138 in the first half, but the Bengals used a long drive and cashed in a turnover to take a 14-6 lead.
A 1-yard touchdown run by Rudi Johnson put Cincinnati up 7-3 in the second quarter. Todd Heap lost a fumble on the third play after the kickoff, and the Bengals recovered on the Baltimore 31.
Four straight runs by Johnson moved the ball to the 8, where Palmer flipped a shovel pass to rookie Tab Perry, who scored his first NFL touchdown on his second reception of the season.
Stover then ended a beat-the-clock march with a 32-yard field goal.