Por que é Chrome procurando meu favicon.ico quando eu servir um arquivo a partir de ASP.NET MVC?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu tenho um controlador no MVC servindo-se imagens de um banco de dados.

EDIT:. Isto ainda acontece se eu servir um arquivo sobre os meios completamente padrão em MVC

Toda vez que eu pedir a minha imagem, o Google Chrome também pesquisas para o meu favicon.ico.

Para evitar discussões desnecessárias sobre outras coisas "Eu também deve se preocupar com" vamos supor que eu não ligo para o cache de qualquer tipo neste exemplo e eu vou sempre voltar HTTP resposta 200 com o arquivo.

No meu controlador eu voltar a seguinte:

return File(fileBytes, contentType);

Depois de inspeccionar Fiddler 2, a seguinte resposta é gerada:

HTTP / 1.1 200 OK
Cache-Control:
pública Content-Type: imagem / gif
ETag: oYu19wKo + KEHkyxZQ2WXAA ==
Servidor: Microsoft-IIS / 7.0
X-AspNetMvc-Version: 1.0
X-ASPNet-Versão: 2.0.50727
X-Powered-By: ASP.NET
Data: Tue, 16 jun 2009 18:48:45 GMT
Content-Length: 29344

Em comparação, esta é a resposta em Fiddler do Google quando eu solicitar (pela primeira vez) o logotipo do Google:

HTTP / 1.1 200 OK
Content-Type: imagem / gif
Last-Modified: Wed, 07 de junho de 2006 19:42:34 GMT
Data: Tue, 16 de junho de 2009 18:50:54 GMT
Expira: Wed, 16 jun 2010 18:50:54 GMT
Cache-Control: público, max-age = 31536000
Servidor: gws
Content-Length: 8706
Idade: 2 |

No entanto, no Chrome depois de receber minha imagem tentativas Chrome para encontrar meu favicon.ico. Ele faz não tentar isso depois de solicitar o logotipo do Google.

Todas as ideias por que isso pode estar acontecendo? No meu entendimento em HTML, a resposta deve ser no cabeçalho de resposta, porque certamente isso é tudo que o cliente tem que ir em frente? Por favor me corrijam!

EDIT 2: Parece um monte de pessoas não entenderam completamente o problema. O problema é não a falta de um favicon e os pedidos erroring em MVC - é o problema de solicitar um favicon quando apenas uma imagem está a ser carregado, com um tipo de conteúdo "image / JPEG ", em oposição a uma página web com um tipo de conteúdo "text / html" !!

Foi útil?

Solução

Isto não tem nada a ver com MVC. Eu estou usando webforms com um serviço de log personalizado construído e me deparei com este post perguntando por que eu tinha 'Arquivo não existe' contínuo erros em meus logs. Esta é localmente em minha máquina de desenvolvimento, não tenho arquivos Favicon.ico em meus projetos, e eu tentei IE, Firefox e Google tentando ver qual navegador é o culpado.

Cada pedido do Google Chrome para meus aplicativos faz uma solicitação para um favicon.ico . Eu tive que começar a registrar navegador localmente para determinar que era no navegador googles fato de que é o culpado. Eu tinha google contato se incomoda. Eu só queria ter certeza de que não era algum novo trojan infecta o meu cromo.

Outras dicas

A resposta real: É um conhecido, erro verificado. * ( recentemente fixo! ... talvez?)

Parece um conhecido, assuntos de longa data com o Chrome: http://crbug.com/39402

Se você quer que ele fixa, mais cedo, estrela a questão. Mais pessoas estrelando o problema provavelmente irá aumentar a sua prioridade e, possivelmente, consertá-lo mais rápido.


**** UPDATE 1 ***: A partir de 15 de maio deste ano (2013) - quatro anos após essa pergunta foi feita - parece que o problema foi corrigido na versão 29: http://crbug.com/39402#c47

Sinta-se livre para desfazer todos os seus hacks e soluções alternativas. :]

**** UPDATE 2 (2015-01) ***: Este é aparentemente ainda um problema para alguns usuários, de acordo com o mesmo link questão. : /

Você tem um favicon? Se não, talvez seja por isso que o Chrome está tentando encontrá-lo cada vez para o seu site. Para o Google já tem o favicon em cache.

uma coisa que você poderia fazer é ter MVC ignorar qualquer pedido de * .ico para que você não obter quaisquer excepções durante a depuração.

Deve ser algo como isto:

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

Esse padrão URL combina com tudo, mas depois que restringi-la para corresponder única coisa que termina em favicon.ico. (Eu não testei isso)

Eu corri para este problema um tempo atrás e tem em torno dele, ignorando a rota específica, adicionando

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

no método RegisterRoutes em Global.asax.

Parece para mim que o Chrome solicita um favicon para seus próprios guias - eu continuei recebendo 404s (porque o meu favicon é somwhere outra coisa e minhas páginas conhecemos) até que eu fiz alguns testes e percebi que era Chrome fazer pedidos diretos para o favicon Arquivo. Não existe uma verdadeira correção, exceto fazendo uma reescrita para o arquivo real Eu acho

Você pode adicionar algo como isto dentro de seu arquivo web.config para se certificar de que o favicon.ico é armazenada em cache no cliente e não está sendo solicitado a cada vez.

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

Você pode / deve fazer o mesmo para todas as imagens / js e css

Você deve definir o cabeçalho Expires para dizer ao navegador quanto tempo ele deve usar a sua cópia local.

Se você verificar a configuração seu projeto diz ícone padrão em algum lugar. Remover isso?

navegador Chrome poderia trabalhar com o site do Google de outra maneira do que com qualquer outro site, de modo que, no início, eu recomendo para verificar se ele procura favicon.ico cada vez em outro lugar, por exemplo, em StackOverflow.

Eu também iria verificar se o Firefox faz o mesmo com o seu site. Acho favicon.ico deve ser solicitada apenas uma vez por prazo navegador, mesmo que não está presente no local. Esta poderia ser bug na versão do Chrome que você usa.

Esta questão SO / resposta explica como servir o Favicon para o navegador usando rotas.

É importante colocar em uma ligação ICON em seu masterpage ou alguns navegadores irá tentar encontrar favicon.ico para todos os diretórios e não apenas globalmente uma vez por feito.

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

Parece Google Toolbar é o culpado julgar pelos meus logs (e IE6 é claro). Ambos vão fazer pedidos de outros do que a raiz

diretórios
 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top