To set timeout in get_headers(), you will need to set stream_context_set_default(), so  you can optimize communication cost as you designed.Below is an example to call get_headers() based on stream_context in the system.

<?php

$url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/100px-PHP-logo.svg.png';

// Store previous default context
$prev = stream_context_get_options(stream_context_get_default());

// Set a small timeout
stream_context_set_default([
    'http' => [
        'timeout' => 3, // seconds
    ]
]);

// Do the head request
$req = @get_headers($url, true);

if (!empty($req)) {
    // Do some useful stuff here
    print_r($req);
}

// Restore previous default context
stream_context_set_default($prev);

?>

Original source: https://gist.github.com/vyspiansky/5a1840c728caacc960a7dfab1f9a9f76