From a legal perspective:
You should attach licensing information to a file in such a way that you cannot successfully deny that you intended to license the file under those terms. Suppose, at some point in the future, you attempt to claim in a court of law that you did not license some particular file under a particular license. The valid methods of attaching licensing information to a file include the set of all methods that would render such a future denial untenable in court, based on the decision of a judge or jury. This is ultimately a subjective determination, but it's the only determination that matters, legally speaking.
From a community perspective:
You should aim for clarity, and try to maximize survival of licensing information through multiple generations of reuse. For this reason, the FSF recommends including licensing information on a per-file basis. If a file is transplanted from your project into another project, you want licensing information to travel with it easily. A notice within the file is the most surefire way to reduce accidental confusion of licensing terms. Per-file notices also help when a project uses different licenses for different files, making it immediately obvious how any particular file is licensed.
Another GPL FAQ item talks about what is legally optimal versus legally necessary:
Is it enough just to put a copy of the GNU GPL in my repository?
Just putting a copy of the GNU GPL in a file in your repository does not explicitly state that the code in the same repository may be used under the GNU GPL. Without such a statement, it's not entirely clear that the permissions in the license really apply to any particular source file. An explicit statement saying that eliminates all doubt.
A file containing just a license, without a statement that certain other files are covered by that license, resembles a file containing just a subroutine which is never called from anywhere else. The resemblance is not perfect: lawyers and courts might apply common sense and conclude that you must have put the copy of the GNU GPL there because you wanted to license the code that way. Or they might not. Why leave an uncertainty?
This statement should be in each source file. A clear statement in the program's README file is legally sufficient as long as that accompanies the code, but it is easy for them to get separated. Why take a risk of uncertainty about your code's license?