A hair cutout comes down to three stages: precise extraction through a channel, edge refinement where the background is complicated, and mask touch-ups along the edge. Each step gets the details here, with the emphasis on avoiding white fringes and broken strands. Swap the background afterwards and nobody can tell.
Open your image and duplicate the background layer first, so you don't end up crying with nowhere to go if it goes wrong. Shortcut Ctrl+J. Surely nobody's still stuck on that one?
Switch to the Channels panel (Window → Channels). Out of red, green and blue, find the one with the biggest contrast between hair and background. Blue usually has the most contrast, but it depends on the image — in this one of mine the red channel is clearly cleaner. Duplicate that channel, and don't wreck the original.
I stepped in this hole too when I was starting: look carefully before you duplicate, or you'll leave the original channel in a mess.
Select the duplicated channel and press Ctrl+L for Levels. Drag the black slider on the left to the right, and the white slider on the right to the left, with the goal of hair almost entirely black and background almost entirely white. Keep your eyes on the hair strands while you drag, or you'll wipe out the flyaways.
If the background still has gray patches, paint them white with a white brush. White specks inside the hair? Paint them black. There's no shortcut here, it's patience work. Set the brush hardness to 0 and keep the flow low, then work slowly.
Watch the details around the mouth and eyes so you don't paint over them. A friend of mine once turned half the model's face white. I still laugh about it.
When you've finished painting, Ctrl+click the channel thumbnail and the white areas get selected. What we actually want is the hair selection, so invert it with Ctrl+Shift+I. The selection may still be a little rough, so go back to the Layers panel and add a mask to the duplicated layer (click the little square icon at the bottom of the panel).
Here's the key move: select the Background layer at the very bottom (or just add a solid color layer underneath as a reference) and you'll see what the hair cutout really looks like. Chances are the edge still has a white fringe, or looks harsh. Double-click the mask thumbnail in the Layers panel to open Select and Mask (Refine Edge in older versions).
Use the Refine Edge Brush tool on the left to sweep once around the hair edge and PS picks out the strands for you. Adjust the radius to suit the image, but don't push it too far or the hair starts to look fake. Tick Decontaminate Colors and output to New Layer (or Layer with Mask — either works).
Check the result. If a pale edge is left over, cover it locally with the mask and a black brush, or adjust it with the Blend If sliders under Layer Style. If you're in a hurry, Layer → Matting → Defringe set to 1 pixel will save the day too.
One last nag: I don't believe those one-second hair cutout tutorials online. If you really want every strand, it takes time. That said, I did come across an online PS tool at https://www.zaixianps.cc that has channel features as well. It's handy for emergencies or for practice, and there's nothing to install. These days, when I'm feeling lazy, I just do it in the browser.
Anyway, that's the whole method — practice makes it second nature. Don't expect to nail it in one go; after ten or so images you'll have the feel for it. If you have questions, ask below and I'll reply when I see them.