为什么我得到苹果touch-icon-precomposed.png的错误

我创build了一个新的rails3项目,但我在服务器日志中多次看到以下日志。 为什么我得到这些要求,我怎样才能避免这些?

在2012-09-18 20:03:53 +0530开始GET“/apple-touch-icon-precomposed.png”为192.168.6.2

ActionController :: RoutingError(没有路由匹配[GET]“/apple-touch-icon-precomposed.png”):

我没有把这个链接放在任何地方,也不想在任何地方渲染这个图像。 我无能为力,为什么这个资源被试图加载。

编者注:这个答案中的信息并不是特别错误,但是更多的技术细节可以在这里find:

  • 你一直想知道的关于触摸图标的一切 (2011年3月,由Mathias Bynens提供)

我想苹果设备提出这些请求,如果设备所有者添加该网站。 这相当于favicon。 为了解决,请添加2个100×100的png文件,将其保存为apple-touch-icon-precomposed.png和apple-touch-icon.png,并上传到服务器的根目录。 之后,错误应该消失。

我发现在试图从站点根目录加载图像的日志中,有许多对apple-touch-icon-precomposed.png和apple-touch-icon.png的请求。 我首先以为这是一个手机主题和插件的错误configuration,但后来发现苹果设备提出这些请求,如果设备所有者将该网站添加到它。

来源: 为什么网站pipe理员应该分析他们的404错误日志 (2012年3月;通过Martin Brinkmann)

如果来自Safari Web浏览器的用户(Apple设备)访问您的网站。 如果在<head>中未按照以下顺序定义该浏览器,浏览器将尝试获取该站点图标:

  1. 苹果触摸图标-57×57-precomposed.png
  2. 苹果触摸图标57×57.png
  3. 苹果触摸图标precomposed.png
  4. 苹果触摸的icon.png

要解决此问题,请为Safari浏览器或苹果设备定义一个图标。 添加这样的东西到您的网站的部分:

 <link rel="apple-touch-icon" href="/custom_icon.png"/> 

如果要保持<head>干净,请使用正确的名称将图标上传到站点的根目录。

默认的图标大小是57px

您可以在iOS开发人员库上find更多详细信息。

请注意,即使用户未将网站joiniOS主屏幕,也可能发生这种情况 – 例如,您GET "/apple-touch-icon-precomposed.png"使用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文件(我的网站不存在)的图像。

如果你在这里结束了search,这是一个简单的configuration,以防止这个错误完整的Web服务器日志:

Apache虚拟主机

 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.pngfavicon.ico

有一个像quiet_assets这样的gem,可以将日志中的这些错误沉默,如果像我一样,您不想将这些文件添加到您的Rails应用程序:

https://github.com/davidcelis/quiet_safari

我终于解决了! 这是Mac设备上的Web剪辑function。 如果用户想在Dock o Desktop中添加您的网站,它会请求这个图标。

 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

如何解决?:添加一个图标来解决问题。

另一种解决scheme是简单地添加一个路由到您的routes.rb

它基本上捕捉到苹果请求,并将404呈现给客户端。 这样你的日志文件不会混乱。

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

然后添加一个方法'apple_touch_not_found'到你的application_controller.rb

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

同样的事情发生在我身上。 是的,正如@Jaoao Leme所说,它似乎与用户将一个网站添加到他们的设备主屏幕上相关。

但是,我注意到,即使日志中有错误,它也发生在幕后,用户从不会看到错误。 我假设设备请求特定于其分辨率的触摸图标(不存在),直到默认为普通的apple-touch-iconapple-touch-icon-precomposed (如果存在),或者产生小的当前页面的屏幕截图。

FWIW,把图标放在/ public目录下。

如果你不在乎所有types的苹果设备上的图标,只需添加

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目录。 redirect到404.html而不是icon.png作品。

只需创build称为适当名称的零大小的文件。
该请求将得到满足,不需要额外的数据传输或更多的logging行。 -DaveG

通过Adobe Edge Animate的即时预览function使用本地服务器时,整个问题只是一个预览问题。 它应该并将由Adobe的Edge Animate开发人员解决,而且不需要调整任何代码或设置。

尝试改变链接

 /apple-touch-icon-precomposed.png 

至:

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