Warum sucht Chrome für meine favicon.ico wenn ich eine Datei von ASP.NET MVC dienen up?

StackOverflow https://stackoverflow.com/questions/1003350

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe einen Controller in MVC Bilder serviert aus einer Datenbank.

EDIT:. Das noch passiert, wenn ich eine Datei über vollständig Standardmittel in MVC dienen up

Jedes Mal, wenn ich mein Bild verlangen, Google Chrome sucht auch nach meiner favicon.ico.

Um unnötige Diskussionen über andere Dinge zu vermeiden wir an, „ich auch kümmern sollte über“ Ich lasse interessieren sich nicht für das Caching auch immer in diesem Beispiel, und ich werde immer HTTP-Antwort 200 mit der Datei zurück.

In meinem Controller kehre ich folgendes:

return File(fileBytes, contentType);

Nach Fiddler Inspektion 2, wird die folgende Reaktion erzeugt wird:

  

HTTP / 1.1 200 OK
  Cache-Control: public
  Content-Type: image / gif
  ETag: oYu19wKo + KEHkyxZQ2WXAA ==
  Server: Microsoft-IIS / 7.0
  X-AspNetMvc-Version: 1.0
  X-ASPNET-Version: 2.0.50727
  X-Powered-By: ASP.NET
  Datum: Di, 16. Juni 2009 18.48.45 GMT
  Content-Length: 29344

Zum Vergleich: das ist die Antwort in Fiddler von Google, wenn ich (zum ersten Mal) fordere das Google-Logo:

  

HTTP / 1.1 200 OK
  Content-Type: image / gif
  Last-Modified: Mi 7. Juni 2006 19.42.34 GMT
  Datum: Di, 16. Juni 2009 18.50.54 GMT
  Gültig bis: Mi, 16. Juni 2010 18.50.54 GMT
  Cache-Control: public, max-age = 31536000
  Server: gws
  Content-Length: 8706
  Alter: 2

Doch in Chrome nach meinem Bild bekommt Chrome versucht, meine favicon.ico zu finden. Es tut nicht versuchen, diese nach dem Google-Logo anfordern.

Irgendwelche Ideen, warum dies passiert sein könnte? Von meinem Verständnis auf HTML, muss die Antwort in der Antwort-Header, weil sicher, dass alle der Kunde hat auf gehen? Bitte korrigieren Sie mich!

EDIT 2: Es ist eine Menge Leute haben scheint falsch verstanden das Problem vollständig. Das Problem ist, nicht das Fehlen eines Favicon und die erroring Anfragen in MVC - es ist das Problem ein Favicon anzufordern, wenn nur ein Bild geladen wird, mit dem Inhaltstyp „IMAGE / JPEG “, im Gegensatz zu einer Webseite mit einem Content-Typ "text / html" !!

War es hilfreich?

Lösung

Das hat nichts mit MVC zu tun. Ich bin mit Webformulare mit einem benutzerdefinierten Protokolldienst gebaut und ich auf diesem Beitrag gestolpert fragen, warum ich kontinuierlich ‚Datei existiert nicht‘ hatte Fehler in meinem Logs. Dies ist lokal auf meine Entwicklung Maschine, ich habe keine favicon.ico Dateien in meinen Projekten, und ich habe versucht, IE, Firefox und Google versuchen, welchen Browser zu sehen, ist der Schuldige.

Jede Anfrage von Google Chrome auf meine apps macht eine Anfrage für eine favicon.ico . Ich hatte vor Ort anmelden Browser zu starten, um festzustellen, dass es in der Tat Googles Browser war, dass der Täter ist. Ich würde Google in Verbindung, wenn es Sie stört. Ich wollte nur sicherstellen, dass es nicht einige neue Trojaner mein Chrom infizieren.

Andere Tipps

Die eigentliche Antwort: Es ist ein bekannter, verifizierte Fehler. * ( vor kurzem behoben! ... vielleicht?)

Sieht aus wie ein bekanntes, langjähriges Problem mit Chrome: http://crbug.com/39402

Wenn Sie es früher festgelegt, Stern das Problem. Immer mehr Menschen das Problem mit wahrscheinlich seine Priorität erhöhen und möglicherweise schneller repariert.


**** UPDATE 1 ***: Ab 15. Mai dieses Jahres (2013) - vier Jahre nach diese Frage gestellt wurde - es ist wie die Ausgabe aussieht wurde in Version 29 behoben: http://crbug.com/39402#c47

Sie können ferner alle Hacks und Workarounds rückgängig zu machen. :]

**** UPDATE 2 (2015-01) ***: Dies ist offenbar immer noch ein Problem für einige Benutzer, nach dem gleichen Problem Link. : /

Haben Sie ein Favicon? Wenn nicht, ist vielleicht der Grund, warum Chrome versucht, es für Ihre Website jedes Mal zu finden. Für Google hat es bereits das Favicon gecached.

ein, was man tun könnte, ist MVC für * ICO jede Anforderung ignorieren, so dass Sie keine Ausnahmen erhalten während des Debuggens.

Sollte so etwas wie diese:

routes.MapRoute("ignore-favicon", "{*path}", null, new {path = ".*/favicon\\.ico"});

Das URL-Muster passt alles, aber dann beschränken wir es nur etwas in favicon.ico enden lassen. (Ich habe nicht getestet)

Ich lief in dieses Problem eine Weile zurück und bekam um sie durch die spezifische Route ignoriert durch Hinzufügen

routes.IgnoreRoute("{*favicon}", new { favicon = ".*/favicon\\.ico" });

in die RegisterRoutes Methode in Global.asax.

Es scheint mir, dass Chrome ein Favicon für seine eigenen Registerkarten fordert - ich hielt 404s bekommen (weil mein Favicon ist somwhere anders und meine Seiten wissen es), bis ich einige Tests haben und erkannte, dass es war Chrome direkte Anfragen an das Favicon zu machen Datei. Keine wirkliche fix außer ein Umschreiben der realen Datei machen ich denke,

Sie können so etwas wie dies in Ihrer web.config Datei hinzufügen, um sicherzustellen, dass der favicon.ico auf dem Client zwischengespeichert wird und nicht jedes Mal angefordert wird.

<location path="favicon.ico">
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Cache-Control" value="public, max-age=31536000" />
             </customHeaders>
        </httpProtocol>
    </system.webServer>
</location>

Sie können / sollten das gleiche für alle Bilder / js und CSS-Dateien tun

Sie sollten setzen die Expires-Header, den Browser zu sagen, wie lange sollte es seine lokale Kopie verwendet werden.

Wenn Sie überprüfen Sie Ihre Projekteinstellung sagt Standardsymbol irgendwo. Entfernen Sie das?

Chrome-Browser könnte mit Google-Website in einer anderen Art und Weise arbeitet, als mit jedem anderen Ort, so auf dem ersten, würde ich empfehlen, zu überprüfen, ob es für favicon.ico woanders jedes Mal sieht, zum Beispiel auf Stackoverflow.

Ich würde auch prüfen, ob Firefox gleich mit Ihrer Website tut. Ich denke, favicon.ico sollte nur einmal pro Browser läuft angefordert werden, auch wenn sie nicht vor Ort anwesend ist. Dies könnte Sie Fehler in Chrome-Version sein verwenden.

Diese SO Frage / Antwort erläutert, wie die Favicon dienen an den Browser von Routen verwendet wird.

Es ist wichtig, in einem ICON Link in Ihre Masterpage zu setzen oder einige Browser werden versuchen, für alle Verzeichnisse zu finden favicon.ico und nicht nur global einmal pro getan.

 <link rel="SHORTCUT ICON" href="<%= Url.Content("~/content/images/rr-favicon.ico") %>"/>

Es scheint Google Toolbar von meinen Logs der Schuldige ist (und IE6 natürlich) zu beurteilen. Beide machen Anfragen nach anderen Verzeichnissen als root

 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
 Mozilla/4.0 (compatible; GoogleToolbar 6.2.1910.1554; Windows 6.0; MSIE 8.0.6001.18828)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top