Вы можете попробовать URI данных. Нет HTTP-запроса!
<link id="favicon" rel="shortcut icon" type="image/png" href="data:image/png;base64,....==">
Если ваши страницы не имеют статического кэширования, ваш значок не сможет быть кэширован, и в зависимости от размера вашего изображения значка ваш исходный код может в результате раздуться.
Значения URI данных, похоже, работают в большинстве современных браузеров; У меня это работает в последних версиях Chrome, Firefox и Safari на Mac. Кажется, не работает в Internet Explorer и, возможно, в некоторых версиях Opera.
Если вы беспокоитесь о старом IE (а вам, вероятно, не следует в наши дни), вы можете включить условный комментарий IE, который будет загружать реальный favicon.ico традиционным способом, поскольку кажется, что более старый Internet Explorer не поддерживает данные URI Favicons
`<!--[if IE ]><link rel="shortcut icon" href="http://example.com/favicon.ico" type="image/x-icon" /><![endif]--> `
- Включите файл favicon.ico в корневой каталог, чтобы охватить браузеры, которые будут запрашивать его в любом случае, поскольку для этих браузеров, если они уже проверяют, что бы вы ни делали, вы могли бы также не тратить HTTP-запрос на ответ 404.
Вы также можете просто использовать значок другого популярного сайта, который, вероятно, будет кэшировать их значок, например http://google.com/favicon.ico
, чтобы он передавался из кэша.
Как отметили комментаторы, то, что вы можете сделать это, не означает, что вы должны это делать, поскольку некоторые браузеры будут запрашивать favicon.ico независимо от разработанных нами приемов. Таким образом, объем накладных расходов, который вы сэкономите, будет ничтожен по сравнению с экономией, которую вы получите от таких вещей, как gzipping, использование заголовков с истекшим сроком для статического содержимого, минимизация файлов JavaScript, помещение фоновых изображений в спрайты или URI данных. , предоставление статических файлов с CDN и т. д.