Почему я получаю сообщение об ошибке apple-touch-icon-precomposed.png

247

Я создал новый проект rails3, но я вижу много раз следующие журналы в журналах моего сервера. Почему я получаю эти запросы и как их избежать?

Запустил GET "/apple-touch-icon-precomposed.png" для 192.168.6.2 в 2012-09-18 20:03:53 +0530

ActionController :: RoutingError (Нет подходящих маршрутов [GET] "/apple-touch-icon-precomposed.png"):

Я нигде не давал эту ссылку и не хочу нигде отображать это изображение. Я не понимаю, почему этот ресурс пытаются загрузить.

Акаш Агравал
источник
4
я получаю ту же самую вещь в моем .net проекте. не имеет ничего общего с рубином. то, что я не понимаю, почему это не стандартная ошибка 404 не найдена. но это не так. просто ошибка маршрутизации. я получаю: контроллер для пути '/apple-touch-icon-precomposed.png' не найден или не реализует IController.
Гораций

Ответы:

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 года, Мартин Бринкманн)

Жоао Леме
источник
52
Я нашел хорошую статью, которая детализирует все, что я хотел знать (и больше): mathiasbynens.be/notes/touch-icons
Alexis
Под корневым каталогом вы имеете в виду app / public directory или public directory?
Бенгала
Я полагаю, что вышеупомянутый автор означает настроенный корневой каталог веб-документов, например, в Apache 2.4 это обычно / var / www / htdocs
Hgehlhausen
70

Если пользователь с веб-браузера Safari (устройства Apple) посещает ваш сайт. Браузер пытается извлечь значок сайта, если он не определен в <head>следующем порядке:

  1. яблоко-сенсорный значок-57x57-precomposed.png
  2. яблоко-сенсорный значок-57x57.png
  3. яблоко-сенсорный значок-precomposed.png
  4. яблоко-сенсорный icon.png

Чтобы решить эту проблему, определите значок для веб-браузеров Safari или устройств Apple. Добавьте что-то подобное в заголовок раздела вашего сайта:

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

Если вы хотите сохранить <head>чистоту, загрузите значок в корневой каталог вашего сайта с правильным именем.

Размер значка по умолчанию составляет 57 пикселей .

Вы можете найти более подробную информацию о библиотеке разработчиков iOS .

Ананд Кумар
источник
Даже с этим определением я все еще получаю 404s для apple-touch-icon-precomposed.png
Крис Хейнс,
3
Теперь рекомендуется, чтобы размер значка по умолчанию был 152 × 152 пикселей, чтобы приспособиться для новых iPad.
Эндрю Лотт
2
Я все еще получаю ту же ошибку, а также дополнительную ошибку маршрутизации для custom_icon.png. Кстати, я получаю эти ошибки при запуске rails в разработке на OSX 10.10.2 с использованием Safari 8.0.3 в качестве браузера.
7
8

Если вы закончили поиск в Google, это простая конфигурация для предотвращения этой ошибки при заполнении журналов веб-сервера:

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 для iOS, это происходит GET "/apple-touch-icon-precomposed.png".

Я обработал этот и другие не-HTML 404 запросы в моем ApplicationController следующим образом:

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 файл (который не существует для моего сайта).

Tinynumbers
источник
4

Там есть драгоценный камень, как quiet_assets , который отключит эти ошибки в ваших журналах, если, как и я, вам не нужно добавлять эти файлы в приложение Rails:

https://github.com/davidcelis/quiet_safari

davidcelis
источник
Это лучшее решение ... ничего, кроме разочарования и огромных файлов журнала, если вы не запрещаете ведение журнала. Запрашиваемые размеры меняются, когда 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работает тоже.

Эдвард Хачатрян
источник
Работал нормально здесь.
Веллингтон1993
3

Я наконец-то решил !! Это функция веб-клипа на устройствах Mac. Если пользователь хочет добавить ваш сайт в 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

как решить ?: Добавить значок для решения проблемы.

molavec
источник
2

Альтернативное решение - просто добавить маршрут в ваши маршруты.

Он в основном перехватывает запрос 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
Роджер
источник
0

То же самое происходит со мной. И да, как сказал @Joao Leme, похоже, что это связано с тем, что пользователь делает закладки сайта на домашнем экране своего устройства.

Тем не менее, я заметил, что, несмотря на наличие ошибки в журнале, это происходит за кулисами, и пользователь никогда не видит ошибку. Я предполагаю, что устройство запрашивает сенсорный значок, соответствующий его разрешению (которого там нет), до тех пор, пока не будет установлено значение по умолчанию для общего apple-touch-iconилиapple-touch-icon-precomposed , если оно есть, или не создаст небольшой скриншот текущей страницы.

FWIW, поместите значки в каталог / public.

Брайан
источник
1
Добавление изображений не решает проблему. Запросы делаются для активов, которые не существуют. Каждый раз, когда происходит этот запрос, сервер отвечает и записывается в журнал. Это не эффективно.
ТАСС
-1

Просто создайте файлы нулевого размера, называемые соответствующими именами.

Запрос будет удовлетворен без дополнительной передачи данных или дальнейших строк регистрации.

Дэйв Дж
источник
1
Очень старый ответ, но обслуживание файла нулевого размера вообще не рекомендуется, потому что веб-клип (ссылка, которую пользователи могут создать на своем домашнем экране) будет отображаться в квадрате без содержимого. Хотя мне не нравятся сложные анти-паттерны, созданные Apple, было бы лучше накапливать ошибки в файле журнала, чем предлагать пользователям shxt опыт, если таковой имеется.
Андреа Моро
-4

Попробуйте изменить ссылку с

/apple-touch-icon-precomposed.png 

чтобы:

<%=asset_path "apple-touch-icon-precomposed.png" %>
Jju
источник
Я нигде не давал эту ссылку и не хочу нигде отображать это изображение. Я не понимаю, почему этот ресурс пытаются загрузить.
Акаш Агравал
Попробуйте найти apple-touch-icon-precomposedв вашем каталоге проекта. Я думаю, что эта ссылка включена в шаблон макета, но я не уверен.
Чжу
1
Это стандартное изображение, запрошенное iOS; это не связано ни с какими ссылками в файлах проекта человека.
Брэд Кох
1
Это изображение также запрашивается моим Droid Razr, поэтому я не уверен, что оно является родным только для устройств iOS.
ТАСС
2
Почему Apple не может согласиться на favicon.ico, как все остальные?
Тони Пэйн