The Royals held play-off chasing Cardiff to a draw but deserved more from a game they led through Garath McCleary's superb hooked first half volley and largely dominated throughout.
Yann Kermorgant had been denied a one-on-one chance by Simon Moore at one end, while Ali Al Habsi had tipped Craig Noone's header onto his crossbar at the other before the Royals took the lead with a beautifully taken volley from substitute McCleary near the end of the first half.
John squandered a chance to make it 2-0 before half-time, and against the run of play Lex Immers headed home City's equaliser after Sammy Ameobi's strike had deflected against the inside of the right post - despite a suspicion of handball in the build-up. Reading threatened a winner and looked the only team likely to nick it against a side vying for a top six spot, but the honours were shared at full-time.
Royals boss Brian McDermott made three changes to the side that lost at Brighton in the week, starting with Stephen Quinn and Andrew Taylor, whilst bringing Jake Cooper back into defence after a served suspension.
The opening chance of the game fell to the hosts as Quinn rode a challenge to send Ola John down the left side. He cut inside his man and unleashed a stinging drive from 25 yards out that Simon Moore did well to parry and gather in at the second attempt with Kermorgant lurking.
With ten minutes played a timely interception from Hector denied O'Keefe a chance after Anthony Pilkington had pulled a ball back to the midfielder just inside the box.
But Simon Moore had to race off his line to save at the feet of Kermorgant moments later when a lovely threaded ball from Ola John found the Frenchman bursting through on goal - his toe poked effort was saved by the body of Moore.
Tom Lawrence had appeals for a penalty dismissed after he went to ground under a challenge from Hector, then Al Habsi produced a great save to tip Craig Noone's header against the underside of his crossbar as it bounced up and looked certain to ripple the Royals' net.
Hal Robson-Kanu was forced off with an injury so Garath McCleary entered the fray early, and his low cross from the right caused mild alarm in the Cardiff box moments after his introduction.
Taylor toed the ball through for John with half an hour played but the City defence got back well to concede a corner as John looked to pull the trigger. McShane recycled a cleared corner by finding John with a cross from the right but again the winger was denied by a block as he shot with his right foot from the corner of the Bluebirds' box.
And after a good spell of pressure, the home side took the lead with a lovely finish. John floated a cross in from the left and Kermorgant did well to get his head to it on the edge of the City box. It looped over the City back line where McCleary brought it down with his back to goal before hooking a right-footed volley into the top right corner for 1-0.
On the stroke of half-time, John had a glorious chance to make it 2-0. Quinn lofted a ball forward and John was onside as he raced in behind the Cardiff back four and through on goal. Choosing to cut inside the backtracking defender with only the keeper to beat he dragged his effort wide of the bottom left corner and the game stayed at 1-0.
Half-time: Reading 1 Cardiff City 0
Reading started the second half well and after good work from McCleary, John arced an effort just wide of the left upright. Then Quinn almost got away but Connolly came across to stop the midfielder's charge forward.
Former Cardiff defender Andy Taylor had a pop next, this time running onto Williams' cut back to drill wide of the right post with a speculative first time effort from range.
Russell's Slade's men were looking for a route back into it though and when Cooper was adjudged to have tripped Pilkington on the left, Ralls' set piece deflected off the Reading wall and skidded across the face of goal and just wide.
Moore held onto an effort from John that fizzed into the goalkeeper's chest, before Brian McDermott introduced Matej Vydra with an hour gone, replacing the industrious Kermorgant up front.
Vydra almost made an immediate impact when he scurried in behind the back line to try to latch onto a deft flick from John, but the ball was scrapped clear by a panicking City defence.
But a double substitution from the visitors did have an instant impact. Sammy Ameobi came off the bench and began a run towards goal with what seemed the use of an arm. His shot took a wicked deflection and beat the sprawling Al Habsi to cannon off the inside of the post, and Lex Immers was first to react and head home from eight yards out.
Vydra was looking a handful and he got in behind the Bluebirds' back line to hook a first time effort towards goal, only for Moore to save instinctively and push the ball over his crossbar.
A scampering run from Danny Williams almost unlocked the City defence with 15 minutes remaining, but he took a tumble after bursting into the box and Cardiff survived a toed deflection from one of their defenders that threatened to squirm past Moore.
With six minutes left, a nice exchange of passes saw McCleary thread the ball into Taylor whose byline cross was blocked by a sliding Connolly, perhaps with the use of an arm. But nothing was given and time was running out for a winner.
Appeals for a push on McShane inside the box in injury time fell on deaf ears, then in the dying embers Simon Cox slid in at the far post to fire a dinked John cross high into the North Stand from a very difficult angle. And that was the last touch of the game.
Full-time: Reading 1 Cardiff City 1
Reading: Al Habsi, Gunter, Taylor, Cooper, McShane (c), Hector, Quinn (Cox 79), Williams, John, Robson-Kanu (McCleary 22), Kermorgant (Vydra 62).
Subs: Bond, Obita, Ferdinand, Norwood.
Cardiff: Moore, Peltier, Bruno, Connolly, Lawrence, Ralls, O'Keefe (Gunnarsson 65), Malone, Noone (Ameobi 65), Pilkington, Immers.
Subs: Wilson, Da Silva, Morrison, Dikgacoi, Saadi.
Yellow: Connolly, Pilkington
Referee: Mr D Drysdale
Att: 17,407 (1,810 away)