Как предотвратить запросы favicon.ico? - PullRequest
452 голосов
/ 24 августа 2009

У меня нет favicon.ico, но IE всегда делает запрос на него.

Можно ли запретить браузеру отправлять запрос на избрание моего сайта? Может быть, есть мета-тег в заголовке HTML?

Ответы [ 10 ]

501 голосов
/ 16 ноября 2012

Сначала я скажу, что наличие значка на веб-странице - это хорошо (обычно).

Однако это не всегда желательно, и иногда разработчикам нужен способ избежать дополнительной нагрузки. Например, IFRAME запрашивает значок, не показывая его. Хуже всего то, что в Chrome и Android IFRAME сгенерирует 3 запроса на значки:

"GET /favicon.ico HTTP/1.1" 404 183
"GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 197
"GET /apple-touch-icon.png HTTP/1.1" 404 189

Следующее использует URI данных и может использоваться, чтобы избежать поддельных запросов favicon:

<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon"> 

Ссылки см. Здесь:

Ошибка / поведение Chrome, вероятно, будет исправлена ​​в следующих версиях.

Вот сообщение об ошибке для голосования:

ОБНОВЛЕНИЕ 1:

Из комментариев (jpic) похоже, что Firefox> = 25 больше не нравится приведенный выше синтаксис. Я тестировал на Firefox 27, и он не работает, пока работает на Webkit / Chrome.

Итак, вот новый, который должен охватывать все последние браузеры. Я тестировал Safari, Chrome и Firefox:

<link rel="icon" href="data:;base64,=">

Я пропустил «быстрое» имя из значения атрибута «rel», поскольку это только для более старых версий IE, а версии IE <8 также не любят dataURI. Не тестируется на IE8. </p>

ОБНОВЛЕНИЕ 2:

Если вам нужен документ для проверки на соответствие HTML5, используйте вместо этого:

<link rel="icon" href="data:;base64,iVBORw0KGgo=">
69 голосов
/ 12 августа 2016

Просто добавьте следующую строку в раздел <head> вашего HTML-файла:

<link rel="icon" href="data:,">

Особенности этого решения:

  • 100% действительный HTML5
  • очень короткий
  • не вызывает никаких причуд в IE 8 и старше
  • не заставляет браузер интерпретировать текущий HTML-код как favicon (что было бы в случае href="#")
42 голосов
/ 14 января 2011

Мне кажется, я видел это (хотя я не проверял и не использовал его лично) :

<link rel="shortcut icon" href="#" />

У кого-нибудь был подобный опыт?

EDIT:

Я только что протестировал приведенный выше фрагмент и при принудительном полном обновлении в Fiddler не было замечено ни одного запроса favicon. Я тестировал против IE8 (режим Compat как стандарты IE7) и FF 3.6.

34 голосов
/ 24 августа 2009

Вы не можете. Все, что вы можете сделать, это сделать этот образ как можно меньшего размера и установить некоторые заголовки аннулирования кэша (Expires, Cache-Control) в будущем. Вот что такое Yahoo! должен сказать о запросах favicon.ico.

4 голосов
/ 09 июля 2011

Вы можете использовать .htaccess или серверные директивы, чтобы запретить доступ к favicon.ico, но сервер отправит ответ об отказе в доступе в браузер, и это все равно замедлит доступ к странице.

Вы можете остановить браузер, запрашивающий favicon.ico, когда пользователь возвращается на ваш сайт, оставив его в кэше браузера.

Во-первых, предоставьте небольшое изображение favicon.ico, оно может быть пустым, но как можно меньше. Я сделал черно-белый менее 200 байтов. Затем, используя директивы .htaccess или server, установите заголовок файла Expires на месяц или два в будущем. Когда тот же пользователь возвращается на ваш сайт, он будет загружен из кэша браузера, и на ваш сайт не будет отправлено ни одного запроса. Не более 404 в журналах сервера тоже.

Если у вас есть контроль над полным сервером Apache или, возможно, виртуальным сервером, вы можете сделать это: -

Если корневым документом сервера является say / var / www / html, добавьте его в /etc/httpd/conf/httpd.conf:-

Alias /favicon.ico "/var/www/html/favicon.ico"
<Directory "/var/www/html">
    <Files favicon.ico>
       ExpiresActive On
       ExpiresDefault "access plus 1 month"
    </Files>
</Directory>

Тогда один файл favicon.ico будет работать для всех виртуальных хостинговых сайтов, поскольку вы используете его для псевдонимов. Он будет извлечен из кэша браузера в течение месяца после посещения пользователями.

Для .htaccess это работает (не проверено мной): -

AddType image/x-icon .ico
ExpiresActive On
ExpiresByType image/x-icon "access plus 1 month"
3 голосов
/ 12 ноября 2013

Очень простое решение - вставить код ниже в ваш .htaccess. У меня была такая же проблема, и она решила мою проблему.

<IfModule mod_alias.c>
    RedirectMatch 403 favicon.ico
</IfModule>

Ссылка: http://perishablepress.com/block-favicon-url-404-requests/

2 голосов
/ 17 марта 2018

если вы используете nginx

# skip favicon.ico
#
location = /favicon.ico {
    access_log off;
    return 204;
}
0 голосов
/ 26 июня 2019

Иногда эта ошибка возникает, когда в HTML есть какой-то закомментированный код и браузер пытается что-то найти. Как и в моем случае, я прокомментировал код для веб-формы в фляге, и я получил это.

Потратив 2 часа, я исправил это следующим образом:

1) Я создал новую среду Python, а затем выдал ошибку в закомментированную строку HTML, до этого мне выдавалась только ошибка 'GET /favicon.ico HTTP / 1.1 "404'

2) Иногда, когда у меня был дублированный код, такой как файл python с таким же именем, я также видел эту ошибку, попробуйте удалить их тоже

0 голосов
/ 01 августа 2016

По нашему опыту, с переходом Apache на запрос favicon.ico мы закомментировали дополнительные заголовки в файле .htaccess.

Например, у нас было Набор заголовков X-XSS-Protection "1; mode = block"

... но мы забыли заранее использовать заголовки a2enmod. Комментирование дополнительных заголовков, которые были отправлены, решило проблему favicon.ico.

У нас также было несколько виртуальных хостов, настроенных для разработки, и произошел сбой только с 500 Internal Server Error при использовании http://localhost и получении /favicon.ico. Если вы запустите curl -v http://localhost/favicon.ico" и получите предупреждение о том, что имя хоста отсутствует в кэше преобразователя или что-то в этом роде, у вас могут возникнуть проблемы.

Это может быть так просто, как не получить (мы попробовали это, и это не сработало, потому что наша основная причина была другой) или посмотреть директивы в apache2.conf или .htaccess, которые могут вызывать странную 500 Internal Server Error сообщения.

Мы обнаружили, что он вышел из строя так быстро, что в журналах ошибок Apache не было ничего полезного, и потратили целое утро на то, чтобы менять мелкие детали тут и там, пока мы не решили проблему установки дополнительных заголовков, когда забыли загрузить mod_headers!

0 голосов
/ 30 января 2012

Вы можете использовать

<link rel="shortcut icon" href="http://localhost/" />

Таким образом, он фактически не будет запрашиваться с сервера.

...