ChatGPT解决这个技术问题 Extra ChatGPT

为什么我收到 apple-touch-icon-precomposed.png 错误

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

在 2012-09-18 20:03:53 +0530 ActionController::RoutingError 开始 GET "/apple-touch-icon-precomposed.png" for 192.168.6.2 (No route matches [GET] "/apple-touch-icon- precomposed.png"):

我没有在任何地方给出这个链接,也不想在任何地方渲染这个图像。我不知道为什么要尝试加载此资源。

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

J
Joao Leme

如果设备所有者将站点添加到其中,我猜苹果设备会发出这些请求。这相当于网站图标。解决方法是添加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
M
Michael Kohne

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

apple-touch-icon-57x57-precomposed.png apple-touch-icon-57x57.png apple-touch-icon-precomposed.png apple-touch-icon.png

要解决此问题,请为 Safari Web 浏览器或 Apple 设备定义图标。将这样的内容添加到您网站的 head 部分:

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

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

默认图标大小为 57px。

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


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

如果您在此处结束谷歌搜索,这是一个简单的配置,可防止此错误填满 Web 服务器日志:

阿帕奇虚拟主机

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


E
Edward Khachatryan

如果您不关心在各种 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 也可以。


在这里工作得很好。
T
Tinynumbers

请注意,即使用户没有将网站添加到他们的 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 文件(我的网站不存在该文件)等图像。


m
molavec

我终于解决了!!这是 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

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


d
davidcelis

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

https://github.com/davidcelis/quiet_safari


这是最好的解决方案……如果您不禁止记录,则只有沮丧和巨大的日志文件。当 Apple 决定时,要求的尺寸会发生变化……让我们追逐更多版本的同一个该死的 favicon。
R
Roger

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

B
Brian

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

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

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


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

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

该请求将得到满足,无需额外的数据传输或更多的日志记录行。


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

尝试更改链接

/apple-touch-icon-precomposed.png 

至:

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

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

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅