web-dev-qa-db-fra.com

Comment prévenir les demandes de favicon.ico?

Je n'ai pas de favicon.ico, mais IE en fait toujours la demande.

Est-il possible d'empêcher le navigateur de demander une favicon à mon site? Peut-être que certains META-TAG dans l'en-tête HTML?

465
Daniel Silveira

Je dirai tout d'abord qu'avoir un favicon dans une page Web est une bonne chose (normalement).

Cependant, ce n'est pas toujours souhaitable et les développeurs ont parfois besoin d'un moyen d'éviter la charge supplémentaire. Par exemple, un IFRAME demanderait un favicon sans le montrer. Pire encore, dans Chrome et Android, un IFRAME générera 3 demandes de favicons:

"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

Les éléments suivants utilisent l'URI des données et peuvent être utilisés pour éviter les fausses demandes de favicon:

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

Pour les références voir ici:

Le bogue/comportement Chrome sera probablement corrigé dans les prochaines versions.

Voici la soumission de bogue pour que vous puissiez voter:

UPDATE 1:

D'après les commentaires (jpic), il semble que Firefox> = 25 n'aime plus la syntaxe ci-dessus. J'ai testé sur Firefox 27 et cela ne fonctionne pas tant qu'il fonctionne toujours sur Webkit/Chrome.

Voici donc le nouveau qui devrait couvrir tous les navigateurs récents. J'ai testé Safari, Chrome et Firefox:

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

J'ai laissé de côté le nom du "raccourci" de la valeur de l'attribut "rel", car il ne concerne que les anciens IE et les versions de IE <8 n'aiment pas non plus les dataURI. Non testé sur IE8.

UPDATE 2:

Si vous souhaitez que votre document soit validé par rapport à HTML5, utilisez plutôt ceci:

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

Ajoutez simplement la ligne suivante à la section <head> de votre fichier HTML:

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

Caractéristiques de cette solution:

  • HTML5 valide à 100%
  • très court
  • ne présente pas de bizarreries de IE 8 et plus
  • ne fait pas que le navigateur interprète le code HTML actuel comme un favicon (comme ce serait le cas avec href="#")
79
vog

Je crois avoir vu ça (Je ne l'ai pas testé ou utilisé personnellement cependant):

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

Quelqu'un a eu une expérience similaire?

EDIT:

Je viens de tester l'extrait de code ci-dessus et, lors d'une actualisation complète forcée, aucune demande de favicon n'a été vue dans Fiddler. J'ai testé contre IE8 (mode Compat en tant que normes IE7) et FF 3.6.

43
mlhDev

Tu ne peux pas. Tout ce que vous pouvez faire est de rendre cette image aussi petite que possible et de définir des en-têtes d'invalidation de cache (Expires, Cache-Control) loin dans le futur. Voici ce que Yahoo! A à dire à propos des demandes de favicon.ico.

35
Ionuț G. Stan

Vous pouvez utiliser les directives .htaccess ou server pour refuser l'accès à favicon.ico, mais le serveur enverra une réponse d'accès refusé au navigateur, ce qui ralentit encore l'accès à la page.

Vous pouvez empêcher le navigateur de demander à favicon.ico le retour d’un utilisateur sur votre site en le faisant rester dans la mémoire cache du navigateur.

Premièrement, fournissez une petite image favicon.ico, peut être vide, mais aussi petite que possible. J'ai fait un noir et blanc de moins de 200 octets. Ensuite, à l'aide des directives .htaccess ou server, définissez l'en-tête de fichier Expires un ou deux mois plus tard. Lorsque le même utilisateur revient sur votre site, il sera chargé à partir du cache du navigateur et aucune demande ne sera envoyée à votre site. Pas plus de 404 dans les journaux du serveur aussi.

Si vous avez le contrôle d'un serveur Apache complet ou peut-être d'un serveur virtuel, vous pouvez le faire: -

Si la racine du document serveur est/var/www/html, ajoutez-la à /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>

Ensuite, un seul favicon.ico fonctionnera pour tous les sites hébergés virtuels puisque vous l'aliasez. Il sera extrait du cache du navigateur pendant un mois après la visite des utilisateurs.

Pour .htaccess, cela est rapporté au travail (non vérifié par moi): -

AddType image/x-icon .ico
ExpiresActive On
ExpiresByType image/x-icon "access plus 1 month"
5
Anon1

Une solution très simple consiste à insérer le code ci-dessous dans votre .htaccess. J'ai eu le même problème et cela résout mon problème.

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

Référence: http://perishablepress.com/block-favicon-url-404-requests/

4
Marcio Mazzucato

si vous utilisez nginx

# skip favicon.ico
#
location = /favicon.ico {
    access_log off;
    return 204;
}
3
Vincent-cm

Parfois, cette erreur survient lorsque le code HTML est commenté et que le navigateur cherche quelque chose. Comme dans mon cas, j'avais commenté le code d'un formulaire Web dans flask et je l'obtenais.

Après avoir passé 2 heures, je l'ai corrigé des manières suivantes:

1) J'ai créé un nouvel environnement python, puis une erreur s'est produite sur la ligne HTML commentée. Auparavant, l'erreur "GET /favicon.ico HTTP/1.1" 404 "a été renvoyée.

2) Parfois, quand j'avais un code en double, comme le fichier python existant avec le même nom, alors aussi j'ai vu cette erreur, essayez de les supprimer aussi

0
ohsoifelse

D'après notre expérience, Apache étant tombé à la demande de favicon.ico, nous avons commenté des en-têtes supplémentaires dans le fichier .htaccess.

Par exemple, nous avions le jeu d'en-tête X-XSS-Protection "1; mode = block"

... mais nous avions oublié les en-têtes Sudo a2enmod auparavant. Commenter les en-têtes supplémentaires envoyés a résolu notre problème de favicon.ico.

Plusieurs hôtes virtuels ont également été configurés pour le développement et nous n'avons échoué qu'avec 500 Internal Server Error lors de l'utilisation de http: // localhost et de l'extraction /favicon.ico. Si vous exécutez "curl -v http: //localhost/favicon.ico " et obtenez un avertissement concernant le fait que le nom d'hôte ne se trouve pas dans le cache du résolveur ou quelque chose de similaire, vous risquez de rencontrer des problèmes.

Cela peut être aussi simple que de ne pas récupérer (nous avons essayé cela et cela n'a pas fonctionné, car notre cause fondamentale était différente) ou rechercher des directives dans Apache2.conf ou .htaccess qui pourraient être à l'origine de étranges messages d'erreur 500 Internal Server.

Nous avons trouvé que cela avait échoué si rapidement que les journaux d’erreur d’Apache n’avaient aucune utilité et nous avons passé une matinée entière à changer de petites choses ici et là jusqu’à ce que nous résolvions le problème de la création d’en-têtes supplémentaires lorsque nous avions oublié de charger mod_headers!

0
J. Declan Young