You send a "Link:" in the http headers. If you're using PHP this is easily done with the header() command, or you could add it to certain files via the .htaccess method.
header('Link: </template/screen.css>; rel=preload; as=style, </scripts/library.js>; rel=preload; as=script, <template/images/h1Logo.png>; rel=preload; as=image');
for example.
If you were doing it in httpd.conf or .htaccess:
<FilesMatch "\.php$">
Header add Link "</template/screen.css>; rel=preload; as=style"
Header add Link "</scripts/library.js>; rel=preload; as=script"
Header add Link "</template/images/h1Logo.png>; rel=preload; as=image"
</FilesMatch>
So it doesn't just "know", you have to tell it.
BEWARE it's possible to push things that aren't actually used, and that can waste bandwidth and have a negative impact on performance. Likewise as these end up in the HTTP headers they can have the same negative impact as excessive numbers of cookies if you go overboard with it, so "good practice" is to limit yourself to EIGHT files to be pushed.
Though really if you have more than 8 files you would see benefit from pushing, there's probably something wrong with how your page is built. (see bootcrap, jquery)
Actually, that's a good one for the snippets section, my PHP code to let people make manifests that can be turned into a header().