When I opened the bitcoin client, I found that it was "synchronizing block headers". Does this mean that the client first downloads block headers and then downloads block bodies? What kind of file does the header of the downloaded block is stored in?
Yes, downloading and validating the headers first has several advantages
You know in advance that the chain you're downloading blocks for is in fact the most-work chain (= the one you would ultimately end up accepting, assuming it is valid). This means you don't waste time on potential forks that have been resolved.
Since you know what blocks you will be downloading, and which peers have them, you can parallellize the download (spreading the download over multiple peers).
In Bitcoin Core, the block headers are stored in the blocks/index/ directory in the datadir, as a LevelDB database.