Por que estou recebendo erro no apple-touch-icon-precomposed.png

247

Eu criei um novo projeto rails3, mas estou vendo os seguintes logs muitas vezes nos logs do meu servidor. Por que estou recebendo essas solicitações e como evitá-las?

Iniciado GET "/apple-touch-icon-precomposed.png" para 192.168.6.2 em 18-09-2012 20:03:53 +0530

ActionController :: RoutingError (Nenhuma rota corresponde a [GET] "/apple-touch-icon-precomposed.png"):

Não forneci este link em nenhum lugar e não quero renderizar esta imagem em nenhum lugar. Não sei por que razão este recurso está sendo carregado.

Akash Agrawal
fonte
4
Estou recebendo exatamente a mesma coisa no meu projeto .net. não tem nada a ver com rubi. o que eu não entendo é por que isso não é um erro 404 não encontrado padrão. mas não é. apenas um erro de roteamento. Eu recebo: O controlador para o caminho '/apple-touch-icon-precomposed.png' não foi encontrado ou não implementa o IController.
horace

Respostas:

221

Acho que os dispositivos da Apple fazem essas solicitações se o proprietário do dispositivo adicionar o site a ele. Isso é o equivalente ao favicon. Para resolver, adicione 2 arquivos 100 × 100 png, salve-os como apple-touch-icon-precomposed.png e apple-touch-icon.png e faça o upload para o diretório raiz do servidor. Depois disso, o erro deve ter desaparecido.

Percebi muitos pedidos para apple-touch-icon-precomposed.png e apple-touch-icon.png nos logs que tentavam carregar as imagens do diretório raiz do site. Primeiro, pensei que fosse uma configuração incorreta do tema e do plug-in para dispositivos móveis, mas descobri mais tarde que os dispositivos Apple fazem essas solicitações se o proprietário do dispositivo adicionar o site a ele.

Fonte: Por que os webmasters devem analisar seu log de erros 404 (março de 2012; por Martin Brinkmann)

Joao Leme
fonte
52
Eu encontrei um bom artigo que detalhes tudo o que eu queria saber (e mais): mathiasbynens.be/notes/touch-icons
Alexis
Com diretório raiz, você quer dizer o diretório app / public ou o diretório público?
Bengala 23/02
Creio que o autor acima significa o diretório documento-raiz da web configurado, por exemplo, em Apache 2.4, geralmente / var / www / htdocs
Hgehlhausen
70

Se um usuário do navegador Safari (dispositivos Apple) visitar seu site. O navegador tenta buscar o ícone do site se ele não estiver definido na <head>seguinte ordem:

  1. apple-touch-icon-57x57-precomposed.png
  2. apple-touch-icon-57x57.png
  3. apple-touch-icon-precomposed.png
  4. apple-touch-icon.png

Para resolver esse problema, defina um ícone para navegadores da Web safari ou dispositivos apple. Adicione algo parecido com isto na seção principal do seu site:

<link rel="apple-touch-icon" href="https://stackoverflow.com/custom_icon.png"/>

Se você quiser se manter <head>limpo, faça o upload do ícone para o diretório raiz do seu site com o nome adequado.

O tamanho padrão do ícone é 57px .

Você pode encontrar mais detalhes na biblioteca de desenvolvedores do iOS .

Anand Kumar
fonte
Mesmo com essa definição, eu ainda obter 404s para apple-touch-icon-precomposed.png
Chris Haines
3
Agora, é recomendado que o tamanho padrão do ícone seja 152 × 152 pixels para acomodar os iPads mais recentes.
Andrew Lott
2
Ainda recebo o mesmo erro, além de um erro de roteamento adicional para custom_icon.png. A propósito, eu recebo esses erros executando trilhos em desenvolvimento no OSX 10.10.2 usando o Safari 8.0.3 como navegador.
7stud
8

Se você terminou aqui pesquisando no Google, esta é uma configuração simples para evitar esse erro nos logs do servidor da Web:

Apache virtualhost

Redirect 404 /apple-touch-icon-precomposed.png
<Location /apple-touch-icon-precomposed.png>
    ErrorDocument 404 "apple-touch-icon-precomposed does not exist"
</Location>

Bloco do servidor Nginx:

location =/apple-touch-icon-precomposed.png {
        log_not_found off;
        access_log off;
}

PS: É possível que você deseja adicionar apple-touch-icon.pnge favicon.icotambém.

Leopoldo Sanczyk
fonte
5

Observe que isso pode acontecer mesmo quando o usuário NÃO marcou o site como favorito na tela inicial do iOS - por exemplo, sempre que você abre uma página usando o Chrome para iOS, ele faz isso GET "/apple-touch-icon-precomposed.png".

Eu lidei com essa e outras solicitações 404 não HTML no meu ApplicationController da seguinte maneira:

respond_to do |format|
  format.html { render :template => "error_404", :layout => "errors", :status => 404 }
  format.all { render :nothing => true, :status => 404 }
end

A format.allresposta cuida de imagens como este arquivo PNG (que não existe no meu site).

Tinynumbers
fonte
4

Há uma jóia como quiet_assets que silenciará esses erros nos seus logs se, como eu, você não quiser adicionar esses arquivos ao seu aplicativo Rails:

https://github.com/davidcelis/quiet_safari

davidcelis
fonte
Esta é a melhor solução ... nada além de frustrações e enormes arquivos de log, se você não inibir o log. Os tamanhos solicitados mudam quando a Apple decide ... nos mantendo em busca de mais versões do mesmo favicon.
vanboom
4

Se você não se importa com o ícone bonito em todos os tipos de dispositivos Apple, basta adicionar

get '/:apple_touch_icon' => redirect('/icon.png'), constraints: { apple_touch_icon: /apple-touch-icon(-\d+x\d+)?(-precomposed)?\.png/ }

para o seu config/routes.rbarquivo e alguns icon.pngpara o seu publicdiretório. Redirecionando para em 404.htmlvez de icon.pngfunciona também.

Edward Khachatryan
fonte
Funcionou bem aqui.
Wellington1993
3

Eu finalmente resolvi !! É um recurso Web Clip em dispositivos Mac. Se um usuário deseja adicionar seu site no Dock o Desktop, ele solicita esse ícone.

You may want users to be able to add your web application 
or webpage link to the Home screen. These links, represented 
by an icon, are called Web Clips. Follow these simple steps 
to specify an icon to represent your web application or webpage
on iOS.

mais informações: https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html

como resolver ?: Adicione um ícone para resolver o problema.

molavec
fonte
2

Uma solução alternativa é simplesmente adicionar uma rota às suas rotas.rb

Basicamente, ele captura a solicitação da Apple e renderiza um 404 de volta ao cliente. Dessa forma, seus arquivos de log não são desordenados.

# routes.rb at the near-end
match '/:png', via: :get, controller: 'application', action: 'apple_touch_not_found', png: /apple-touch-icon.*\.png/

adicione um método 'apple_touch_not_found' ao seu application_controller.rb

# application_controller.rb
def apple_touch_not_found
  render  plain: 'apple-touch icons not found', status: 404
end
Roger
fonte
0

A mesma coisa está acontecendo para mim. E sim, como o @Joao Leme disse, parece que está relacionado a um usuário que está adicionando um site aos favoritos na tela inicial do dispositivo.

No entanto, notei que, embora haja um erro no log, isso está acontecendo nos bastidores e o usuário nunca vê o erro. Presumo que o dispositivo faça uma solicitação para o ícone de toque específico para sua resolução (que não existe) até o padrão geral apple-touch-iconou apple-touch-icon-precomposed, se presente, ou gerar uma pequena captura de tela da página atual.

FWIW, coloque os ícones no diretório / public.

Brian
fonte
1
Adicionar imagens não resolve o problema. Estão sendo feitas solicitações para ativos que não existem. Sempre que essa solicitação ocorre, o servidor responde e uma entrada de log é gravada. Isso não é eficiente.
Tass 04/04
-1

Basta criar arquivos de tamanho zero chamados de nomes apropriados.

A solicitação será atendida sem transferência adicional de dados nem outras linhas de registro.

Dave G
fonte
1
Resposta muito antiga, mas não é recomendável exibir um arquivo de tamanho zero, porque o Web Clip (link que os usuários podem criar na tela inicial) aparecerá uma caixa quadrada sem conteúdo. Embora eu não goste dos complicados antipadrões criados pela Apple, seria melhor acumular erros em um arquivo de log do que oferecer uma experiência shxt aos usuários, se houver.
Andrea Moro
-4

Tente alterar o link de

/apple-touch-icon-precomposed.png 

para:

<%=asset_path "apple-touch-icon-precomposed.png" %>
Jju
fonte
Não forneci este link em nenhum lugar e não quero renderizar esta imagem em nenhum lugar. Não sei por que razão este recurso está sendo carregado.
Akash Agrawal
Tente encontrar apple-touch-icon-precomposedno diretório do projeto. Acho que esse link foi incluído no modelo de layout, mas não sou o shure.
JJU
1
Esta é uma imagem padrão solicitada pelo iOS; não está relacionado a nenhum link nos arquivos de projeto de uma pessoa.
Brad Koch
1
Essa imagem também é solicitada pelo meu droid razr, por isso não tenho certeza de que seja nativa apenas para dispositivos iOS.
Tass
2
Por que a Apple não pode simplesmente se contentar com favicon.ico como todos os outros?
Tony Payne