Perché Chrome sta cercando il mio favicon.ico quando offro un file da ASP.NET MVC?

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

  •  05-07-2019
  •  | 
  •  

Domanda

Ho un controller in MVC che fornisce immagini da un database.

EDIT: Questo succede ancora se offro un file su mezzi completamente standard in MVC.

Ogni volta che richiedo la mia immagine, Google Chrome cerca anche il mio favicon.ico.

Per evitare discussioni inutili su altre cose, dovrei anche occuparmi di " supponiamo che in questo esempio non mi interessi minimizzare la memorizzazione nella cache e restituirò sempre la risposta HTTP 200 con il file.

Nel mio controller restituisco quanto segue:

return File(fileBytes, contentType);

Dopo aver ispezionato Fiddler 2, viene generata la seguente risposta:

  

HTTP / 1.1 200 OK
  Cache-Control: public
  Tipo di contenuto: image / gif
  ETag: oYu19wKo + KEHkyxZQ2WXAA ==
  Server: Microsoft-IIS / 7.0
  X-AspNetMvc-Version: 1.0
  Versione X-AspNet: 2.0.50727
  X-Powered-By: ASP.NET
  Data: mar, 16 giu 2009 18:48:45 GMT
  Lunghezza contenuto: 29344

In confronto, questa è la risposta in Fiddler da Google quando richiedo (per la prima volta) il logo di Google:

  

HTTP / 1.1 200 OK
  Tipo di contenuto: image / gif
  Ultima modifica: mer, 07 giu 2006 19:42:34 GMT
  Data: mar, 16 giu 2009 18:50:54 GMT
  Scadenza: mer, 16 giu 2010 18:50:54 GMT
  Controllo cache: pubblico, età massima = 31536000
  Server: gws
  Lunghezza contenuto: 8706
  Età: 2 anni

Tuttavia, in Chrome dopo aver ottenuto la mia immagine Chrome tenta di trovare il mio favicon.ico. non prova questo dopo aver richiesto il logo di Google.

Qualche idea sul perché ciò potrebbe accadere? Da quanto ho capito su HTML, la risposta deve essere nell'intestazione della risposta perché sicuramente questo è tutto ciò che il cliente deve continuare? Per favore, correggimi!

EDIT 2: Sembra che molte persone abbiano completamente frainteso il problema. Il problema è non la mancanza di una favicon e le richieste di errore in MVC - è il problema di richiedere una favicon quando viene caricata solo un'immagine, con un tipo di contenuto di " IMAGE / JPEG " ;, a differenza di una pagina web con un tipo di contenuto di " TEXT / HTML " !!

È stato utile?

Soluzione

Questo non ha nulla a che fare con MVC. Sto usando i moduli web con un servizio di log personalizzato e mi sono imbattuto in questo post chiedendomi perché avessi errori continui "Il file non esiste" nei miei log. Questo è localmente sulla mia macchina di sviluppo, non ho file favicon.ico nei miei progetti e ho provato IE, Firefox e Google cercando di vedere quale browser è la parte colpevole.

Ogni richiesta da Google Chrome alle mie app richiede un favicon.ico . Ho dovuto iniziare a registrare il browser localmente per determinare che in effetti era il browser Google che è il colpevole. Contatterei Google se ti disturba. Volevo solo assicurarmi che non fosse un nuovo trojan a infettare il mio Chrome.

Altri suggerimenti

La risposta effettiva: è un bug noto e verificato. * ( risolto di recente! ... forse?)

Sembra un problema noto e di vecchia data con Chrome: http://crbug.com/39402

Se vuoi risolverlo prima, inizia il problema. Un numero maggiore di persone con protagonista il problema probabilmente aumenterà la sua priorità e probabilmente lo risolverà più velocemente


**** AGGIORNAMENTO 1 ***: A partire dal 15 maggio di quest'anno (2013) - quattro anni dopo che questa domanda è stata posta - sembra che il problema sia stato risolto nella versione 29: http://crbug.com/39402#c47

Sentiti libero di annullare tutti i tuoi hack e soluzioni alternative. :]

**** AGGIORNAMENTO 2 (2015-01) ***: A quanto pare questo è ancora un problema per alcuni utenti, secondo lo stesso link di problema. : /

Hai una favicon? In caso contrario, forse è per questo che Chrome sta cercando di trovarlo ogni volta per il tuo sito web. Per Google ha già la favicon memorizzata nella cache.

una cosa che potresti fare è far sì che MVC ignori qualsiasi richiesta per * .ico in modo da non ottenere eccezioni durante il debug.

Dovrebbe essere qualcosa del genere:

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

Quel pattern URL corrisponde a tutto, ma poi lo limitiamo a corrispondere solo a tutto ciò che termina in favicon.ico. (Non l'ho provato)

Ho riscontrato questo problema qualche tempo fa e l'ho aggirato ignorando il percorso specifico aggiungendo

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

nel metodo RegisterRoutes in Global.asax.

Mi sembra che Chrome richieda una favicon per le sue schede - ho continuato a ricevere 404s (perché la mia favicon è altrove e le mie pagine lo sanno) fino a quando ho fatto alcuni test e ho capito che era Chrome che faceva richieste dirette alla favicon file. Nessuna vera correzione se non quella di fare una riscrittura sul file reale immagino

Puoi aggiungere qualcosa del genere nel tuo file web.config per assicurarti che il favicon.ico sia memorizzato nella cache del client e non venga richiesto ogni volta.

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

Puoi / dovresti fare lo stesso per qualsiasi file images / .js e css

Dovresti impostare l'intestazione Expires per dire al browser per quanto tempo dovrebbe usare la sua copia locale.

Se controlli l'impostazione del tuo progetto, dice l'icona predefinita da qualche parte. Rimuoverlo?

Il browser Chrome potrebbe funzionare con il sito di Google in un modo diverso rispetto a qualsiasi altro sito, quindi, all'inizio, consiglierei di verificare se cerca favicon.ico ogni volta che altrove, ad esempio su StackOverflow.

Vorrei anche verificare se Firefox fa lo stesso con il tuo sito. Penso che favicon.ico dovrebbe essere richiesto una sola volta per ogni browser, anche se non è presente sul sito. Potrebbe trattarsi di un bug nella versione di Chrome che usi.

Questa SO domanda / risposta spiega come servire Favicon al browser utilizzando i percorsi.

È importante inserire un collegamento ICON nella tua pagina principale o alcuni browser proveranno a trovare favicon.ico per tutte le directory e non solo globalmente una volta fatto.

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

Sembra che Google toolbar sia la parte colpevole a giudicare dai miei registri (e IE6 ovviamente). Entrambi faranno richieste per directory diverse dalla radice

 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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top