Как предотвратить запросы favicon.ico?

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

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

Ответ 1

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

Однако это не всегда желательно, и иногда разработчикам нужен способ избежать дополнительной полезной нагрузки. Например, 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,=">

Я забыл имя "shortcut" из значения атрибута "rel", так как только для более старого IE и версий IE < 8 тоже не нравится dataURI. Не тестировалось на IE8.

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

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

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

Ответ 2

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

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

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

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

Ответ 3

Я считаю, что видел этот (я его не тестировал или не использовал лично):

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

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

EDIT:

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

Ответ 4

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

Ответ 5

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

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

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

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

Если корневой файл сервера говорит /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"

Ответ 6

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

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

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

Ответ 7

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

# skip favicon.ico
#
location = /favicon.ico {
    access_log off;
    return 204;
}

Ответ 8

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

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

... но мы заранее забыли sudo a2enmod headers. Комментирование дополнительных отправленных заголовков разрешило нашу проблему с 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!

Ответ 9

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

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

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

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

Ответ 10

Получалась эта ошибка случайным образом на локальном хосте. Перезагрузка сделала трюк для меня.

Ответ 11

Я предлагаю разместить веб-сайт в .zip/сжатую папку. Вот как выглядела веб-страница примера в папке .zip/compression: WEBSITE IN .ZIP/COMPRESSED FOLDER

Это будет выглядеть в обычной папке: WEBSITE IN NORMAL FOLDER

Ответ 12

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

<link rel="shortcut icon" href="#" onclick="location.href='http://localhost/'; return false;" />

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