If you have site on https and run php server on http the function get_site_icon_url return a link with https.
I think the problem here https://github.com/WordPress/WordPress/blob/master/wp-includes/general-template.php#L810, because WordPress should use here get_site_url() instead get_option( 'site_icon' ).
Maybe we can add filter on get_site_icon_url to fix it problem or we should fix it in WordPress?