web-dev-qa-db-de.com

Wie vermeide ich favicon.ico Anfragen?

Ich habe kein favicon.ico, aber IE fordert es immer an.

Kann ich verhindern, dass der Browser von meiner Website aus ein Favicon anfordert? Vielleicht etwas META-TAG im HTML-Header?

465
Daniel Silveira

Ich werde zuerst sagen, dass ein Favicon in einer Webseite (normalerweise) eine gute Sache ist.

Es ist jedoch nicht immer erwünscht und manchmal müssen Entwickler einen Weg finden, um die zusätzliche Nutzlast zu vermeiden. Zum Beispiel würde ein IFRAME ein Favicon anfordern, ohne es anzuzeigen. Am schlimmsten ist jedoch, dass in Chrome und Android ein IFRAME drei Anfragen nach Favoriten generiert:

"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

Das Folgende verwendet Daten-URI und kann verwendet werden, um gefälschte Favicon-Anforderungen zu vermeiden:

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

Referenzen finden Sie hier:

Der Fehler/das Verhalten von Chrome wird wahrscheinlich in zukünftigen Versionen behoben.

Hier ist der Fehlerbericht, über den Sie abstimmen können:

UPDATE 1:

Aus den Kommentaren (jpic) geht hervor, dass Firefox> = 25 die obige Syntax nicht mehr mag. Ich habe Firefox 27 getestet und es funktioniert nicht, solange es noch mit Webkit/Chrome funktioniert.

Hier ist also der neue, der alle aktuellen Browser abdecken sollte. Ich habe Safari, Chrome und Firefox getestet:

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

Ich habe den "Shortcut" -Namen aus dem "rel" -Attributwert weggelassen, da dies nur für ältere IE und Versionen von IE <8 gilt, die dataURIs ebenfalls nicht mögen. Nicht auf IE8 getestet.

UPDATE 2:

Wenn Sie Ihr Dokument für die Validierung gegen HTML5 benötigen, verwenden Sie stattdessen Folgendes:

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

Fügen Sie einfach die folgende Zeile in den Abschnitt <head> Ihrer HTML-Datei ein:

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

Merkmale dieser Lösung:

  • 100% gültiges HTML5
  • sehr kurze
  • keine Macken von IE 8 und älter
  • lässt den Browser den aktuellen HTML-Code nicht als Favicon interpretieren (was bei href="#" der Fall wäre)
79
vog

Ich glaube, ich habe das gesehen (Ich habe es nicht getestet oder persönlich benutzt):

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

Hat jemand ähnliche Erfahrungen gemacht?

EDIT:

Ich habe gerade das obige Snippet getestet und bei einer erzwungenen vollständigen Aktualisierung wurden in Fiddler keine Favicon-Anfragen gesehen. Ich habe gegen IE8 (Compat-Modus als IE7-Standards) und FF 3.6 getestet.

43
mlhDev

Das kannst du nicht. Alles, was Sie tun können, ist, das Image so klein wie möglich zu machen und einige Cache-Ungültigkeits-Header (Expires, Cache-Control) in der Zukunft zu setzen. Hier ist was Yahoo! zu sagen hat über Anfragen von favicon.ico.

35
Ionuț G. Stan

Sie können .htaccess oder Server-Direktiven verwenden, um den Zugriff auf favicon.ico zu verweigern. Der Server sendet jedoch eine Antwort an den Browser, die den Zugriff verweigert. Dadurch wird der Seitenzugriff jedoch verlangsamt.

Sie können den Browser anhalten, favicon.ico anzufordern, wenn ein Benutzer zu Ihrer Site zurückkehrt, indem Sie ihn dazu bringen, im Browser-Cache zu bleiben.

Stellen Sie zunächst ein kleines favicon.ico-Image bereit, das möglicherweise leer, aber so klein wie möglich ist. Ich habe eine Schwarz-Weiß-Datei unter 200 Bytes erstellt. Setzen Sie dann mithilfe von .htaccess- oder Server-Direktiven den Header "Expires" ein oder zwei Monate in der Zukunft. Wenn derselbe Benutzer zu Ihrer Site zurückkehrt, wird er aus dem Browser-Cache geladen und es wird keine Anforderung an Ihre Site gesendet. Keine weiteren 404 in den Serverprotokollen.

Wenn Sie die Kontrolle über einen vollständigen Apache-Server oder einen virtuellen Server haben, können Sie dies tun:

Wenn das Stammverzeichnis des Serverdokuments/var/www/html lautet, fügen Sie dies zu /etc/httpd/conf/httpd.conf:- hinzu.

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

Dann funktioniert ein einziges favicon.ico für alle virtuell gehosteten Sites, da Sie es als Alias ​​verwenden. Es wird für einen Monat nach dem Besuch des Benutzers aus dem Browser-Cache abgerufen.

Für .htaccess wird gemeldet, dass dies funktioniert (von mir nicht überprüft): -

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

Eine sehr einfache Lösung besteht darin, den folgenden Code in Ihr .htaccess einzufügen. Ich hatte das gleiche Problem und es löst mein Problem.

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

Referenz: http://perishablepress.com/block-favicon-url-404-requests/

4

wenn Sie Nginx verwenden

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

Manchmal tritt dieser Fehler auf, wenn HTML einen kommentierten Code enthält und der Browser versucht, nach etwas zu suchen. Wie in meinem Fall hatte ich Code für ein Webformular in flask kommentiert und bekam diesen.

Nach 2 Stunden habe ich es folgendermaßen behoben:

1) Ich habe eine neue python -Umgebung erstellt und dann einen Fehler in die kommentierte HTML-Zeile geworfen. Vorher wurde nur der Fehler 'GET /favicon.ico HTTP/1.1 "404' ausgegeben.

2) Manchmal, wenn ich einen doppelten Code hatte, wie z. B. eine python -Datei mit demselben Namen, dann habe ich auch diesen Fehler gesehen. Versuchen Sie auch, diesen zu entfernen

0
ohsoifelse

Nach unserer Erfahrung haben wir mit Apache auf Anfrage von favicon.ico zusätzliche Header in der .htaccess-Datei auskommentiert.

Zum Beispiel hatten wir Header gesetzt X-XSS-Protection "1; mode = block"

... aber wir hatten vorher die Header von Sudo a2enmod vergessen. Das Auskommentieren von zusätzlichen Kopfzeilen, die gesendet wurden, löste unser Problem mit favicon.ico.

Wir hatten auch mehrere virtuelle Hosts für die Entwicklung eingerichtet und versagten nur mit 500 Internal Server Error, wenn http: // localhost verwendet und /favicon.ico abgerufen wurde. Wenn Sie "curl -v http: //localhost/favicon.ico " ausführen und eine Warnung erhalten, dass sich der Hostname nicht im Resolver-Cache befindet, oder etwas Ähnliches, können Probleme auftreten.

Es könnte so einfach sein, wie nicht abzurufen (wir haben es versucht und es hat nicht funktioniert, weil unsere Hauptursache anders war) oder sich in Apache2.conf oder .htaccess nach Anweisungen umzusehen, die möglicherweise seltsame 500 Internal Server-Fehlermeldungen verursachen.

Wir fanden es so schnell fehlgeschlagen, dass die Fehlerprotokolle von Apache nichts Nützliches enthielten und verbrachten einen ganzen Morgen damit, kleine Dinge hier und da zu ändern, bis wir das Problem des Setzens zusätzlicher Header gelöst hatten, als wir vergessen hatten, mod_headers zu laden!

0
J. Declan Young