apple-touch-icon-precomposed.pngでエラーが発生するのはなぜですか


247

新しいrails3プロジェクトを作成しましたが、サーバーログに次のログが何度も表示されます。なぜ私はこれらのリクエストを受け取っているのですか?

2012-09-18 20:03:53 +0530に192.168.6.2のGET "/apple-touch-icon-precomposed.png"を開始しました

ActionController :: RoutingError([GET] "/apple-touch-icon-precomposed.png"に一致するルートはありません):

私はこのリンクをどこにも与えておらず、この画像をどこにもレンダリングしたくありません。このリソースをロードしようとしている理由がわかりません。


4
私の.netプロジェクトでもまったく同じです。ルビーとは何の関係もありません。私が理解していないのは、これが標準の404 not foundエラーではない理由です。しかし、そうではありません。ルーティングエラーだけです。取得:パス '/apple-touch-icon-precomposed.png'のコントローラーが見つからなかったか、IControllerを実装していません。
ホレス、2012

回答:


221

デバイスの所有者がサイトを追加した場合、Appleデバイスはこれらの要求を行うと思います。これはファビコンに相当します。解決するには、2つの100×100 pngファイルを追加し、apple-touch-icon-precomposed.pngおよびapple-touch-icon.pngとして保存し、サーバーのルートディレクトリにアップロードします。その後、エラーはなくなります。

サイトのルートディレクトリから画像を読み込もうとしたログで、apple-touch-icon-precomposed.pngとapple-touch-icon.pngに対する多くのリクエストに気づきました。最初はモバイルのテーマとプラグインの設定ミスだと思っていましたが、後でデバイスの所有者がサイトを追加するとAppleデバイスがそれらのリクエストを行うことがわかりました。

出典:ウェブマスターが404エラーログを分析する理由(2012年3月、Martin Brinkmann作)


52
私が知りたいすべて(およびその他)の詳細を説明した素晴らしい記事を見つけました: mathiasbynens.be/notes/touch-icons
Alexis

ルートディレクトリとは、app / publicディレクトリまたはpublicディレクトリを意味しますか?
ベンガラ

上記の作成者は、構成されたWebドキュメントルートディレクトリを意味すると思います。たとえば、Apache 2.4では通常/ var / www / htdocs
Hgehlhausen

70

Safari Webブラウザー(Appleデバイス)のユーザーがサイトにアクセスした場合。<head>次の順序で定義されていない場合、ブラウザはサイトアイコンを取得しようとします。

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

この問題を解決するには、Safari WebブラウザーまたはAppleデバイスのアイコンを定義します。次のようなものをサイトのヘッドセクションに追加します。

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

<head>クリーンにしたい場合は、アイコンをサイトのルートディレクトリに適切な名前でアップロードします。

デフォルトのアイコンサイズは57pxです

詳細については、iOS開発者ライブラリをご覧ください。


この定義を使用しても、apple-touch-icon-precomposed.pngに対して404が表示されます
Chris Haines

3
新しいiPadに対応するために、デフォルトのアイコンサイズを152×152ピクセルにすることをお勧めします。
Andrew Lott 2014年

2
それでも同じエラーが発生し、custom_icon.pngの追加のルーティングエラーも発生します。ちなみに、ブラウザとしてSafari 8.0.3を使用しているOSX 10.10.2で開発中にRailsを実行すると、これらのエラーが発生します。
2015

8

ここでグーグルを終了した場合、これはこのエラーが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>

Nginxサーバーブロック:

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

PS:追加apple-touch-icon.pngしたいことも可能ですfavicon.ico


5

これは、ユーザーがサイトをiOSのホーム画面にブックマークしていない場合でも発生する可能性があることに注意してください。たとえば、Chrome for iOSを使用してページを開くと、いつでもが実行されますGET "/apple-touch-icon-precomposed.png"

私は次のように、ApplicationControllerでこれと他の非HTML 404リクエストを処理しました。

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

format.all応答は、(私のサイトのために存在していない)、このPNGファイルとして画像の世話をします。


4

これらのファイルをRailsアプリに追加したくない場合は、quiet_assetsのような宝石があり、ログでこれらのエラーを抑制します。

https://github.com/davidcelis/quiet_safari


これは最良の解決策です...ロギングを禁止しない場合は、フラストレーションと膨大なログファイルしかありません。要求されたサイズは、Appleが決定したときに変更されます。同じファビコンのより多くのバージョンを追跡し続けます。
vanboom

4

あらゆる種類のAppleデバイスでアイコンがきれいに見えることを気にしない場合は、追加してください

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

あなたのconfig/routes.rbファイルといくつかのicon.pngあなたのpublicディレクトリに。の404.html代わりににicon.pngもリダイレクトします。


ここでうまくいきました。
Wellington1993

3

やっと解決しました!! それはだウェブクリップマックデバイス上の機能。ユーザーがDock oデスクトップにWebサイトを追加する場合、このアイコンを要求します。

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.

詳細: https : //developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html

解決方法: 問題を解決するためのアイコンを追加します。


2

別の解決策は、単にあなたのroutes.rbにルートを追加することです

基本的にはAppleリクエストをキャッチし、404をクライアントにレンダリングします。これにより、ログファイルが乱雑になりません。

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

次に、application_controller.rbにメソッド「apple_touch_not_found」を追加します

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

0

私にも同じことが起こっています。そして、はい、@ Joao Lemeが言ったように、デバイスのホーム画面にサイトをブックマークしているユーザーに関連しているようです。

しかし、ログにエラーがあったとしても、それは裏で起こっており、ユーザーがエラーを見ることはありません。私は、デフォルトで一般的なapple-touch-iconまたはapple-touch-icon-precomposedが存在する場合はに設定するか、または現在のページの小さなスクリーンショットを生成するまで、デバイスがその解像度に固有のタッチアイコン(そこにない)を要求すると想定します。

FWIW、/ publicディレクトリにアイコンを配置します。


1
画像を追加しても問題は解決しません。存在しないアセットをリクエストしています。この要求が発生するたびに、サーバーが応答し、ログエントリが書き込まれます。それは効率的ではありません。
Tass

-1

適切な名前と呼ばれるサイズがゼロのファイルを作成するだけです。

要求は、追加のデータ転送や追加のログ行なしで満たされます。


1
非常に古い答えですが、Webクリップ(ユーザーがホーム画面に作成する可能性のあるリンク)にコンテンツのない四角いボックスが表示されるため、サイズがゼロのファイルを提供することはまったくお勧めできません。Appleによって作成された複雑なアンチパターンは好きではありませんが、ユーザーにshxtエクスペリエンスを提供するよりも、エラーをログファイルに蓄積する方が適切です。
Andrea Moro

-4

からリンクを変更してみてください

/apple-touch-icon-precomposed.png 

に:

<%=asset_path "apple-touch-icon-precomposed.png" %>

私はこのリンクをどこにも与えておらず、この画像をどこにもレンダリングしたくありません。このリソースをロードしようとしている理由がわかりません。
Akash Agrawal 2012

apple-touch-icon-precomposedプロジェクトディレクトリで検索してみてください。このリンクはレイアウトテンプレートに含まれていると思いますが、私はシュアではありません。
ジュジュ

1
これはiOSが要求する標準の画像です。個人のプロジェクトファイル内のリンクとは関係ありません。
ブラッドコッホ

1
この画像は私のドロイドrazrからもリクエストされているため、iOSデバイスにのみネイティブであるかどうかはわかりません。
タス通信

2
なぜAppleは他のみんなと同じようにfavicon.icoだけで解決できないのですか?
Tony Payne、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.