Warum erhalte ich eine Fehlermeldung für apple-touch-icon-precomposed.png?

247

Ich habe ein neues Rails3-Projekt erstellt, sehe jedoch häufig folgende Protokolle in meinen Serverprotokollen. Warum bekomme ich diese Anfrage und wie kann ich diese vermeiden?

Startete GET "/apple-touch-icon-precomposed.png" für 192.168.6.2 am 2012-09-18 20:03:53 +0530

ActionController :: RoutingError (Keine Route stimmt mit [GET] "/apple-touch-icon-precomposed.png" überein):

Ich habe diesen Link nirgendwo angegeben und möchte dieses Bild nirgendwo rendern. Ich habe keine Ahnung, warum versucht wird, diese Ressource zu laden.

Akash Agrawal
quelle
4
Ich bekomme genau das gleiche in meinem .net-Projekt. hat nichts mit rubin zu tun. Was ich nicht verstehe ist, warum dies kein Standard 404 nicht gefundener Fehler ist. aber das ist es nicht. nur ein Routing-Fehler. Ich bekomme: Der Controller für den Pfad '/apple-touch-icon-precomposed.png' wurde nicht gefunden oder implementiert IController nicht.
Horace

Antworten:

221

Ich denke, Apple-Geräte stellen diese Anfragen, wenn der Gerätebesitzer die Site hinzufügt. Dies entspricht dem Favicon. Fügen Sie zum Auflösen 2 100 × 100-PNG-Dateien hinzu, speichern Sie sie als apple-touch-icon-precomposed.png und apple-touch-icon.png und laden Sie sie in das Stammverzeichnis des Servers hoch. Danach sollte der Fehler behoben sein.

Ich habe viele Anfragen nach apple-touch-icon-precomposed.png und apple-touch-icon.png in den Protokollen bemerkt, die versucht haben, die Bilder aus dem Stammverzeichnis der Site zu laden. Ich dachte zuerst, es sei eine Fehlkonfiguration des mobilen Themas und des Plugins, fand aber später heraus, dass Apple-Geräte diese Anforderungen stellen, wenn der Gerätebesitzer die Site hinzufügt.

Quelle: Warum Webmaster ihr 404-Fehlerprotokoll analysieren sollten (März 2012; von Martin Brinkmann)

Joao Leme
quelle
52
Ich fand einen schönen Artikel, der alles beschreibt, was ich wissen wollte (und mehr): mathiasbynens.be/notes/touch-icons
Alexis
Mit Stammverzeichnis meinen Sie die App / das öffentliche Verzeichnis oder das öffentliche Verzeichnis?
Bengala
Ich glaube, der obige Autor meint das konfigurierte Webdokument-Stammverzeichnis, zB in Apache 2.4 normalerweise / var / www / htdocs
Hgehlhausen
70

Wenn ein Benutzer des Safari-Webbrowsers (Apple-Geräte) Ihre Website besucht. Der Browser versucht, das Site-Symbol abzurufen, wenn es nicht <head>in der folgenden Reihenfolge definiert ist:

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

Um dieses Problem zu beheben, definieren Sie entweder ein Symbol für Safari-Webbrowser oder Apple-Geräte. Fügen Sie dem Kopfbereich Ihrer Website Folgendes hinzu:

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

Wenn Sie <head>sauber bleiben möchten, laden Sie das Symbol mit dem richtigen Namen in das Stammverzeichnis Ihrer Website hoch.

Die Standardsymbolgröße beträgt 57px .

Weitere Informationen finden Sie in der iOS-Entwicklerbibliothek .

Anand Kumar
quelle
Selbst mit dieser Definition bekomme ich immer noch 404s für Apple-Touch-Icon-Precomposed.png
Chris Haines
3
Es wird jetzt empfohlen, die Standard-Symbolgröße auf 152 × 152 Pixel zu beschränken, um neueren iPads gerecht zu werden.
Andrew Lott
2
Ich erhalte immer noch den gleichen Fehler sowie einen zusätzlichen Routing-Fehler für custom_icon.png. Übrigens, ich bekomme diese Fehler beim Ausführen von Rails in der Entwicklung unter OSX 10.10.2 mit Safari 8.0.3 als Browser.
7stud
8

Wenn Sie hier gegoogelt haben, ist dies eine einfache Konfiguration, um zu verhindern, dass dieser Fehler die Webserver-Protokolle voll macht:

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>

Nginx-Serverblock:

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

PS: Ist es möglich, dass Sie hinzufügen möchten apple-touch-icon.pngund favicon.icoauch.

Leopoldo Sanczyk
quelle
5

Beachten Sie, dass dies auch dann passieren kann, wenn der Benutzer die Site NICHT auf seinem iOS-Startbildschirm mit einem Lesezeichen versehen hat. Wenn Sie beispielsweise eine Seite mit Chrome für iOS öffnen, wird dies a GET "/apple-touch-icon-precomposed.png" .

Ich habe diese und andere Nicht-HTML 404-Anforderungen in meinem ApplicationController wie folgt behandelt:

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

Die format.allAntwort kümmert sich um Bilder wie diese PNG-Datei (die für meine Site nicht existiert).

Zinnzahlen
quelle
4

Es gibt ein Juwel wie quiet_assets , das diese Fehler in Ihren Protokollen zum Schweigen , wenn Sie wie ich diese Dateien nicht zu Ihrer Rails-App hinzufügen möchten:

https://github.com/davidcelis/quiet_safari

Davidcelis
quelle
Dies ist die beste Lösung ... nichts als Frustrationen und enorme Protokolldateien, wenn Sie die Protokollierung nicht verhindern. Die angeforderten Größen ändern sich, wenn Apple entscheidet, dass wir mit mehr Versionen desselben verdammten Favicons auf der Jagd bleiben.
Vanboom
4

Wenn Sie sich nicht dafür interessieren, dass das Symbol auf allen Apple-Geräten hübsch aussieht, fügen Sie es einfach hinzu

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

zu Ihrer config/routes.rbDatei und einige icon.pngzu Ihrem publicVerzeichnis. Weiterleiten an 404.htmlstatt icon.pngfunktioniert auch.

Edward Khachatryan
quelle
Hat hier gut funktioniert.
Wellington 1993,
3

Ich habe es endlich gelöst !! Es ist eine Webclip- Funktion auf Mac-Geräten. Wenn ein Benutzer Ihre Website in Dock o Desktop hinzufügen möchte, fordert er dieses Symbol an.

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.

Weitere Informationen: https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html

Wie löse ich?: Fügen Sie ein Symbol hinzu, um das Problem zu lösen.

molavec
quelle
2

Eine alternative Lösung besteht darin, Ihrer route.rb einfach eine Route hinzuzufügen

Grundsätzlich wird die Apple-Anfrage abgefangen und ein 404 an den Client zurückgesendet. Auf diese Weise werden Ihre Protokolldateien nicht überladen.

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

Fügen Sie dann Ihrer application_controller.rb eine Methode 'apple_touch_not_found' hinzu

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

Das gleiche passiert für mich. Und ja, wie @Joao Leme sagte, scheint es damit zu tun zu haben, dass ein Benutzer eine Site mit einem Lesezeichen für den Homescreen seines Geräts erstellt.

Ich habe jedoch festgestellt, dass ein Fehler im Protokoll hinter den Kulissen auftritt und der Benutzer den Fehler nie sieht. Ich gehe davon aus, dass das Gerät eine Anfrage für das Touch-Symbol stellt, das für seine Auflösung spezifisch ist (was nicht vorhanden ist), bis standardmäßig das allgemeine apple-touch-iconoderapple-touch-icon-precomposed , falls vorhanden, oder ein kleiner Screenshot der aktuellen Seite erstellt wird.

FWIW, legen Sie die Symbole im Verzeichnis / public ab.

Brian
quelle
1
Durch Hinzufügen der Bilder wird das Problem nicht behoben. Es werden Anfragen für nicht vorhandene Vermögenswerte gestellt. Jedes Mal, wenn diese Anforderung auftritt, antwortet der Server und ein Protokolleintrag wird geschrieben. Das ist nicht effizient.
Tass
-1

Erstellen Sie einfach Dateien mit der Größe Null, die als entsprechende Namen bezeichnet werden.

Die Anfrage wird ohne zusätzliche Datenübertragung oder weitere Protokollierungszeilen erfüllt.

Dave G.
quelle
1
Sehr alte Antwort, aber das Bereitstellen einer Datei mit der Größe Null wird überhaupt nicht empfohlen, da der Webclip (Link, den Benutzer möglicherweise auf ihrem Startbildschirm erstellen) als quadratisches Feld ohne Inhalt angezeigt wird. Obwohl mir die von Apple erstellten komplizierten Anti-Patterns nicht gefallen, ist es besser, Fehler in einer Protokolldatei anzuhäufen, als den Benutzern gegebenenfalls eine Shxt-Erfahrung anzubieten.
Andrea Moro
-4

Versuchen Sie, den Link von zu ändern

/apple-touch-icon-precomposed.png 

zu:

<%=asset_path "apple-touch-icon-precomposed.png" %>
Jju
quelle
Ich habe diesen Link nirgendwo angegeben und möchte dieses Bild nirgendwo rendern. Ich habe keine Ahnung, warum versucht wird, diese Ressource zu laden.
Akash Agrawal
Versuchen Sie, apple-touch-icon-precomposedin Ihrem Projektverzeichnis zu finden . Ich denke, dieser Link ist in der Layoutvorlage enthalten, aber ich bin nicht sicher.
Jju
1
Dies ist ein Standardbild, das von iOS angefordert wird. Es bezieht sich nicht auf Links in den Projektdateien einer Person.
Brad Koch
1
Dieses Bild wird auch von meinem Droiden Razr angefordert, daher bin ich mir nicht sicher, ob es nur für iOS-Geräte nativ ist.
Tass
2
Warum kann sich Apple nicht wie alle anderen mit favicon.ico zufrieden geben?
Tony Payne