【问题标题】:Why am I getting error for apple-touch-icon-precomposed.png为什么我收到 apple-touch-icon-precomposed.png 错误
【发布时间】:2012-09-10 22:09:03
【问题描述】:

我创建了一个新的 rails3 项目,但在我的服务器日志中多次看到以下日志。为什么我会收到这些请求,我该如何避免这些请求?

开始 GET "/apple-touch-icon-precomposed.png" for 192.168.6.2 at 2012-09-18 20:03:53 +0530

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

我没有在任何地方提供此链接,也不想在任何地方呈现此图像。我不知道为什么要尝试加载此资源。

【问题讨论】:

  • 我在我的 .net 项目中得到了同样的结果。与红宝石无关。我不明白为什么这不是标准的 404 not found 错误。但事实并非如此。只是一个路由错误。我得到:路径“/apple-touch-icon-precomposed.png”的控制器未找到或未实现 IController。

标签: apple-touch-icon


【解决方案1】:

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

我注意到日志中有很多对 apple-touch-icon-precomposed.png 和 apple-touch-icon.png 的请求,它们试图从站点的根目录加载图像。我最初认为这是移动主题和插件的错误配置,但后来发现如果设备所有者将网站添加到 Apple 设备会发出这些请求。

来源:Why Webmasters Should Analyze Their 404 Error Log (Mar 2012; by Martin Brinkmann)

【讨论】:

  • 我发现了一篇很好的文章,详细介绍了我想知道的一切(以及更多):mathiasbynens.be/notes/touch-icons
  • 根目录是指app/public目录还是public目录?
  • 我相信上面的作者是指配置的web文档根目录,例如在 Apache 2.4 中,它通常是 /var/www/htdocs
【解决方案2】:

如果用户从 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 网络浏览器或 Apple 设备定义一个图标。将这样的内容添加到您网站的 head 部分:

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

如果您想保持&lt;head&gt; 干净,请使用正确的名称将图标上传到您网站的根目录。

默认图标大小为 57 像素

您可以在iOS developer library 上找到更多详细信息。

【讨论】:

  • 即使有这个定义,apple-touch-icon-precomposed.png 仍然会得到 404s
  • 现在建议默认图标大小为 152 × 152 像素,以适应较新的 iPad。
  • 我仍然收到相同的错误,以及 custom_icon.png 的附加路由错误。顺便说一句,我在使用 Safari 8.0.3 作为浏览器的 OSX 10.10.2 上运行 rails 时遇到这些错误。
【解决方案3】:

如果您在此处结束了谷歌搜索,这是一个简单的配置,可防止此错误填满 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

【讨论】:

    【解决方案4】:

    请注意,即使用户没有将网站添加到他们的 iOS 主屏幕上,也会发生这种情况 - 例如,每当您使用 iOS 版 Chrome 打开页面时,它都会执行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 文件(我的网站不存在该文件)等图像。

    【讨论】:

      【解决方案5】:

      我终于解决了!!这是 Mac 设备上的 Web Clip 功能。如果用户想在 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

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

      【讨论】:

        【解决方案6】:

        如果您不关心图标在各种 Apple 设备上看起来是否漂亮,只需添加

        get '/:apple_touch_icon' =&gt; 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 也可以。

        【讨论】:

        • 在这里工作得很好。
        【解决方案7】:

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

        https://github.com/davidcelis/quiet_safari

        【讨论】:

        • 这是最好的解决方案...如果您不禁止记录,则只会带来挫败感和巨大的日志文件。当 Apple 决定时,要求的尺寸会发生变化……让我们继续使用同一个该死的 favicon 的更多版本。
        【解决方案8】:

        另一种解决方案是简单地将路由添加到您的 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/
        

        然后将方法“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
        

        【讨论】:

          【解决方案9】:

          同样的事情发生在我身上。是的,正如@Joao Leme 所说,这似乎与用户将网站添加到设备主屏幕的书签有关。

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

          FWIW,将图标放在 /public 目录中。

          【讨论】:

          • 添加图片并不能解决问题。正在为不存在的资产发出请求。每次发生此请求时,服务器都会响应并写入日志条目。那是没有效率的。
          【解决方案10】:

          只需创建名为适当名称的零大小文件。

          无需额外的数据传输或更多的记录行即可满足请求。

          【讨论】:

          • 非常老的答案,但根本不建议提供零大小的文件,因为 Web Clip(用户可以在其主屏幕上创建的链接)将出现一个没有内容的方形框。虽然我不喜欢 Apple 创建的复杂反模式,但最好将错误堆积在日志文件中,而不是向用户提供 shxt 体验(如果有的话)。
          【解决方案11】:

          尝试更改链接

          /apple-touch-icon-precomposed.png 
          

          到:

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

          【讨论】:

          • 我没有在任何地方给出这个链接,也不想在任何地方渲染这个图像。我不知道为什么要尝试加载此资源。
          • 尝试在你的项目目录中找到apple-touch-icon-precomposed。我认为这个链接包含在布局模板中,但我不是舒尔。
          • 这是iOS要求的标准图片;它与一个人的项目文件中的任何链接都没有关系。
          • 我的 droid razr 也请求了这张图片,所以我不确定它是否仅适用于 iOS 设备。
          • 为什么 Apple 不能像其他人一样满足于 favicon.ico?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-05
          • 2013-09-11
          相关资源
          最近更新 更多