¿Por qué Chrome está buscando mi favicon.ico cuando sirvo un archivo de ASP.NET MVC?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Tengo un controlador en MVC que sirve imágenes de una base de datos.

EDIT: Esto todavía sucede si sirvo un archivo por encima de los medios completamente estándar en MVC.

Cada vez que solicito mi imagen, Google Chrome también busca mi favicon.ico.

Para evitar discusiones innecesarias sobre otras cosas " también debería preocuparme " asumamos que no me interesa el almacenamiento en caché de ningún tipo en este ejemplo y siempre devolveré la respuesta HTTP 200 con el archivo.

En mi controlador devuelvo lo siguiente:

return File(fileBytes, contentType);

Después de inspeccionar Fiddler 2, se genera la siguiente respuesta:

  

HTTP / 1.1 200 OK
  Cache-Control:

  Tipo de contenido: imagen / gif
  ETag: oYu19wKo + KEHkyxZQ2WXAA ==
  Servidor: Microsoft-IIS / 7.0
  Versión X-AspNetMvc: 1.0
  Versión X-AspNet: 2.0.50727
  X-Powered By: ASP.NET
  Fecha: martes, 16 de junio de 2009 18:48:45 GMT
  Longitud del contenido: 29344

En comparación, esta es la respuesta en Fiddler de Google cuando solicito (por primera vez) el logotipo de Google:

  

HTTP / 1.1 200 OK
  Tipo de contenido: imagen / gif
  Última modificación: mié, 07 de junio de 2006 19:42:34 GMT
  Fecha: martes, 16 de junio de 2009 18:50:54 GMT
  Caduca el miércoles 16 de junio de 2010 a las 18:50:54 GMT
  Control de caché: público, edad máxima = 31536000
  Servidor: gws
  Contenido-Longitud: 8706
  Edad: 2 años

Sin embargo, en Chrome después de obtener mi imagen, Chrome intenta encontrar mi favicon.ico. no lo intenta después de solicitar el logotipo de Google.

¿Alguna idea de por qué esto podría estar sucediendo? Desde mi entendimiento sobre HTML, la respuesta debe estar en el encabezado de la respuesta, porque seguramente eso es todo lo que el cliente tiene que seguir. ¡Por favor, corrígeme!

EDIT 2: Parece que muchas personas han malinterpretado completamente el problema. El problema es no la falta de un favicon y las solicitudes de error en MVC: es el problema de solicitar un favicon cuando solo se carga una imagen, con un tipo de contenido de "IMAGEN / JPEG " ;, a diferencia de una página web con un tipo de contenido de " TEXT / HTML " !!

¿Fue útil?

Solución

Esto no tiene nada que ver con MVC. Estoy usando formularios web con un servicio de registro personalizado y me topé con esta publicación preguntándome por qué tenía errores continuos de 'El archivo no existe' en mis registros. Esto está localmente en mi máquina de desarrollo, no tengo archivos favicon.ico en mis proyectos, y he intentado con IE, Firefox y Google tratando de ver qué navegador es el culpable.

Cada solicitud de Google Chrome a mis aplicaciones realiza una solicitud de favicon.ico . Tuve que comenzar a registrar el navegador localmente para determinar que en realidad el culpable era el navegador de Google. Me pondría en contacto con google si te molesta. Solo quería asegurarme de que no se trataba de un nuevo troyano que estaba infectando mi chrome.

Otros consejos

La respuesta real: es un error conocido y verificado. * ( recientemente arreglado! ... tal vez?)

Parece un problema conocido y de larga data con Chrome: http://crbug.com/39402

Si desea que se solucione antes, marque el problema. Es probable que más personas que protagonicen el problema aumenten su prioridad y posiblemente lo solucionen más rápido.


**** ACTUALIZACIÓN 1 ***: A partir del 15 de mayo de este año (2013), cuatro años después de que se formulara esta pregunta, parece que el problema se solucionó en la versión 29: http://crbug.com/39402#c47

Siéntase libre de deshacer todos sus hacks y soluciones alternativas. :]

**** ACTUALIZACIÓN 2 (2015-01) ***: Aparentemente, esto sigue siendo un problema para algunos usuarios, de acuerdo con el mismo enlace del problema. : /

¿Tienes un favicon? Si no, quizás es por eso que Chrome intenta encontrarlo cada vez para su sitio web. Para google ya tiene el favicon en caché.

una cosa que podría hacer es hacer que MVC ignore cualquier solicitud de * .ico para que no obtenga ninguna excepción durante la depuración.

Debería ser algo como esto:

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

Ese patrón de URL coincide con todo, pero luego lo restringimos para que solo coincida con cualquier cosa que termine en favicon.ico. (No he probado esto)

Hace un tiempo encontré este problema y lo resolví ignorando la ruta específica agregando

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

en el método RegisterRoutes en Global.asax.

Me parece que Chrome solicita un favicon para sus propias pestañas: seguí obteniendo 404s (porque mi favicon está en otra parte y mis páginas lo saben) hasta que hice algunas pruebas y me di cuenta de que era Chrome haciendo solicitudes directas al favicon expediente. No hay una solución real, excepto hacer una reescritura en el archivo real, supongo

Puedes agregar algo como esto dentro de tu archivo web.config para asegurarte de que favicon.ico esté en caché en el cliente y no se solicite todas las veces.

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

Puedes / deberías hacer lo mismo con cualquier imagen / .js y archivos css

Debe configurar el encabezado Caduca para decirle al navegador cuánto tiempo debe usar su copia local.

Si verificas la configuración de tu proyecto, dice un ícono predeterminado en algún lugar. ¿Eliminar eso?

El navegador Chrome podría funcionar con el sitio de Google de otra manera que con cualquier otro sitio, por lo que, al principio, recomendaría verificar si busca favicon.ico cada vez que en otro lugar, por ejemplo, en StackOverflow.

También verificaría si Firefox hace lo mismo con tu sitio. Creo que favicon.ico debería solicitarse solo una vez por navegador ejecutado, incluso si no está presente en el sitio. Esto podría ser un error en la versión de Chrome que utilizas.

Esta pregunta / respuesta SO explica cómo servir el Favicon al navegador utilizando rutas.

Es importante colocar un enlace ICON en su página maestra o algunos navegadores intentarán encontrar favicon.ico para todos los directorios y no solo de forma global una vez por cada hecho.

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

Parece que la barra de herramientas de Google es la parte culpable a juzgar por mis registros (y IE6 por supuesto). Ambos harán solicitudes de directorios distintos a la raíz

 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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top