You may be tripping over the multiple meanings of the word "head(er|ing)". The request and response headers exchanged by the user-agent and your server are one thing. The "head" section of a page is another.
If you've got static html pages then the header question probably doesn't apply. Responsive pages that work within html and css-- constructions like
@media screen and (max-width: 960px)
<link rel = "stylesheet" type = "text/css" media = "screen and (max-width:960px)" ...
leading to different stylesheets or different lines in the same css-- don't need any more information. Everything the search engine needs to know is right there in the html.
If you have user-agent detection in your htaccess and send different users to different pages, it may or may not be appropriate to use a header declaration. Personally I wouldn't bother. Save the "vary" business for pages that are constructed on the fly.
That's what I meant by "whatever generated the html". If the pages are hand-rolled by you, then the <header> segment will be similarly hand-rolled. If it's page-specific, it will go either inside a <Files> envelope or in the htaccess belonging to a subdirectory.