Pourquoi Chrome recherche-t-il mon fichier favicon.ico lorsque je sers un fichier à partir d'ASP.NET MVC?

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

  •  05-07-2019
  •  | 
  •  

Question

J'ai un contrôleur dans MVC servant des images d'une base de données.

EDIT: Cela se produit encore si je sers un fichier via des moyens totalement standard dans MVC.

Chaque fois que je demande mon image, Google Chrome recherche également mon favicon.ico.

Pour éviter toute discussion inutile sur d’autres sujets, "je devrais également prendre en compte", supposons que je ne me soucie absolument pas de la mise en cache dans cet exemple et que je renverrai toujours la réponse HTTP 200 avec le fichier.

Dans mon contrôleur, je retourne ce qui suit:

return File(fileBytes, contentType);

Après avoir inspecté Fiddler 2, la réponse suivante est générée:

  

HTTP / 1.1 200 OK
  Cache-Control: public
  Type de contenu: image / gif
  ETag: oYu19wKo + KEHkyxZQ2WXAA ==
  Serveur: Microsoft-IIS / 7.0
  X-AspNetMvc-Version: 1.0
  X-AspNet-Version: 2.0.50727
  X-Powered-By: ASP.NET
  Date: mar 16 juin 2009 18:48:45 GMT
  Content-Length: 29344

Par comparaison, voici la réponse de Fiddler dans Google lorsque je demande (pour la première fois) le logo Google:

  

HTTP / 1.1 200 OK
  Type de contenu: image / gif
  Dernière modification le: mercredi, 07 juin 2006 19:42:34 GMT
  Date: mardi 16 juin 2009 à 18h50:54 GMT
  Expire le: 16 juin 2010 18:50:54 GMT
  Cache-Control: public, max-age = 31536000
  Serveur: gws
  Content-Length: 8706
  Âge: 2 ans

Cependant, après avoir récupéré mon image, dans Chrome, Chrome tente de trouver mon favicon.ico. Il ne l’essaye pas après avoir demandé le logo de Google.

Des idées pour expliquer cela? D'après ce que je comprends du HTML, la réponse doit figurer dans l'en-tête de la réponse, car c'est tout ce que le client doit continuer. S'il vous plaît corrigez-moi!

EDIT 2: Il semble que beaucoup de gens aient complètement mal compris le problème. Le problème n’est pas de l’absence d’un favicon et des requêtes erronées dans MVC. C’est le problème de la demande d’un favicon lorsque seule une image est chargée, avec un type de contenu de "IMAGE / JPEG ", par opposition à une page Web dont le type de contenu est" TEXT / HTML "!!

Était-ce utile?

La solution

Cela n’a rien à voir avec MVC. J'utilise des formulaires Web avec un service de journalisation personnalisé et je suis tombé par hasard sur ce message en me demandant pourquoi j'avais des erreurs continues «Le fichier n'existe pas» dans mes journaux. C’est localement sur ma machine de développement, je n’ai aucun fichier favicon.ico dans mes projets et j’ai essayé avec IE, Firefox et Google d’essayer de voir quel navigateur est le coupable.

Chaque demande de Google Chrome à mes applications crée une demande pour un favicon.ico . Je devais commencer à enregistrer le navigateur localement pour déterminer que c’était bien le navigateur googles qui en était la cause. Je contacterais Google si cela vous dérange. Je voulais juste m'assurer que ce n'était pas un nouveau cheval de Troie infectant mon chrome.

Autres conseils

La réponse réelle: c’est un bogue connu et vérifié. * ( récemment corrigé! ... peut-être?)

Ressemble à un problème connu de longue date avec Chrome: http://crbug.com/39402

Si vous souhaitez que le problème soit résolu plus tôt, lancez le problème. Davantage de personnes concernées par le problème augmenteront probablement sa priorité et le feront résoudre plus rapidement.

**** MISE À JOUR 1 ***: À compter du 15 mai de cette année (2013), quatre ans après que cette question a été posée, il semble que le problème ait été résolu dans la version 29: http://crbug.com/39402#c47

N'hésitez pas à annuler tous vos hacks et solutions de contournement. :]

**** UPDATE 2 (2015-01) ***: Il semble que cela reste un problème pour certains utilisateurs, selon le même lien. : /

Avez-vous un favicon? Sinon, c'est peut-être pourquoi Chrome tente de le trouver à chaque fois pour votre site Web. Pour Google, le favicon est déjà mis en cache.

Une des choses que vous pouvez faire est de laisser MVC ignorer toute requête pour * .ico afin d'éviter toute exception lors du débogage.

Devrait ressembler à ceci:

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

Ce modèle d'URL correspond à tout, mais nous le limitons ensuite à tout élément se terminant par favicon.ico. (Je n'ai pas testé cela)

J'ai rencontré ce problème il y a quelque temps et je l'ai contourné en ignorant la route spécifique en ajoutant

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

dans la méthode RegisterRoutes dans Global.asax.

Il me semble que Chrome demande un favicon pour ses propres onglets. J'ai continué à obtenir des 404 (car mon favicon est ailleurs et mes pages le savent) jusqu'à ce que je fasse quelques tests et réalise que c'était Chrome qui adressait des demandes directes au favicon. fichier. Pas de vraie solution, sauf une réécriture du vrai fichier, je suppose

Vous pouvez ajouter quelque chose comme ceci dans votre fichier web.config pour vous assurer que le favicon.ico est mis en cache sur le client et qu'il n'est pas demandé à chaque fois.

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

Vous pouvez / devez faire la même chose pour tous les fichiers images / .js et css

Vous devez définir l'en-tête Expires pour indiquer au navigateur combien de temps il doit utiliser sa copie locale.

Si vous vérifiez les paramètres de votre projet, l’icône par défaut apparaît quelque part. Supprimer ça?

Le navigateur Chrome pourrait fonctionner avec le site Google de manière différente de celle de tout autre site. Par conséquent, je vous recommande tout d'abord de vérifier s'il recherche favicon.ico chaque fois ailleurs, par exemple sur StackOverflow.

Je voudrais aussi vérifier si Firefox fait la même chose avec votre site. Je pense que favicon.ico ne devrait être demandé qu’une fois par navigateur, même s’il n’est pas présent sur le site. Cela pourrait être un bogue dans la version de Chrome que vous utilisez.

Cette question / réponse SO explique comment servir le Favicon au navigateur à l'aide de routes.

Il est important de mettre un lien ICON dans votre page principale, sinon certains navigateurs essaieront de trouver favicon.ico pour tous les répertoires et pas seulement globalement une fois à la fin.

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

Il semble que la barre d’outils de Google soit la partie coupable à en juger par mes journaux (et IE6 bien sûr). Ils feront tous deux des demandes pour des répertoires autres que la racine

 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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top