Dlaczego dostaję błąd dla apple-touch-icon-precomposed.png

247

Utworzyłem nowy projekt rails3, ale w dziennikach serwera wiele razy widzę następujące dzienniki. Dlaczego otrzymuję te prośby i jak mogę ich uniknąć?

Rozpoczęto GET „/apple-touch-icon-precomposed.png” dla 192.168.6.2 at 18.09.2012 20:03:53 +0530

ActionController :: RoutingError (Brak trasy pasuje [GET] „/apple-touch-icon-precomposed.png”):

Nigdzie nie podałem tego linku i nigdzie nie chcę renderować tego obrazu. Nie mam pojęcia, dlaczego próbuje się załadować ten zasób.

Akash Agrawal
źródło
4
Dostaję dokładnie to samo w moim projekcie .net. nie ma nic wspólnego z rubinem. nie rozumiem, dlaczego nie jest to standardowy błąd 404 nie znaleziony. ale tak nie jest. tylko błąd routingu. Rozumiem: nie znaleziono kontrolera ścieżki „/apple-touch-icon-precomposed.png” lub nie implementuje IController.
horace

Odpowiedzi:

221

Sądzę, że urządzenia Apple wysyłają te żądania, jeśli właściciel urządzenia doda do niej witrynę. Jest to odpowiednik favikonu. Aby rozwiązać problem, dodaj 2 100 × 100 plików png, zapisz go jako apple-touch-icon-precomposed.png i apple-touch-icon.png i prześlij do katalogu głównego serwera. Następnie błąd powinien zniknąć.

Zauważyłem wiele próśb o apple-touch-icon-precomposed.png i apple-touch-icon.png w logach, które próbowały załadować obrazy z katalogu głównego witryny. Najpierw pomyślałem, że to błędna konfiguracja motywu mobilnego i wtyczki, ale później dowiedziałem się, że urządzenia Apple wysyłają te żądania, jeśli właściciel urządzenia doda do nich witrynę.

Źródło: Dlaczego webmasterzy powinni analizować swój dziennik błędów 404 (marzec 2012; Martin Brinkmann)

Joao Leme
źródło
52
Znalazłem fajny artykuł opisujący
Alexis
Przez katalog główny masz na myśli aplikację / katalog publiczny czy katalog publiczny?
Bengala
Uważam, że powyższy autor oznacza skonfigurowany katalog główny dokumentu internetowego, np. W Apache 2.4 zwykle / var / www /
htdocs
70

Jeśli użytkownik przeglądarki Safari (urządzenia Apple) odwiedzi Twoją witrynę. Przeglądarka próbuje pobrać ikonę witryny, jeśli nie jest zdefiniowana w <head>następującej kolejności:

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

Aby rozwiązać ten problem, zdefiniuj ikonę przeglądarki Safari lub urządzenia Apple. Dodaj coś takiego do sekcji nagłówka swojej witryny:

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

Jeśli chcesz zachować <head>czystość, prześlij ikonę do katalogu głównego witryny o prawidłowej nazwie.

Domyślny rozmiar ikon jest 57px .

Możesz znaleźć więcej informacji na temat biblioteki programistów iOS .

Anand Kumar
źródło
Nawet przy tej definicji wciąż otrzymuję 404 dla apple-touch-icon-precomposed.png
Chris Haines
3
Zaleca się teraz, aby domyślny rozmiar ikony wynosił 152 × 152 piksele, aby dostosować się do nowszych iPadów.
Andrew Lott,
2
Nadal pojawia się ten sam błąd, a także dodatkowy błąd routingu dla custom_icon.png. Nawiasem mówiąc, dostaję te błędy podczas uruchamiania szyn w OSX 10.10.2, używając przeglądarki Safari 8.0.3 jako przeglądarki.
7stud
8

Jeśli zakończyłeś tutaj googling, jest to prosta konfiguracja, aby zapobiec temu błędowi zapełnienia dzienników serwera WWW:

Wirtualny host Apache

Redirect 404 /apple-touch-icon-precomposed.png
<Location /apple-touch-icon-precomposed.png>
    ErrorDocument 404 "apple-touch-icon-precomposed does not exist"
</Location>

Blok serwera Nginx:

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

PS: Czy to możliwe chcesz dodać apple-touch-icon.pngi favicon.icozbyt.

Leopoldo Sanczyk
źródło
5

Pamiętaj, że może się to zdarzyć nawet wtedy, gdy użytkownik NIE oznaczył strony zakładką do ekranu głównego iOS - na przykład za każdym razem, gdy otwierasz stronę za pomocą Chrome na iOS, robi to GET "/apple-touch-icon-precomposed.png" .

W moim ApplicationController obsłużyłem to i inne żądania w formacie innym niż HTML 404 w następujący sposób:

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

format.allOdpowiedź dba obrazów takich jak ten PNG (który nie istnieje na moim miejscu).

Tinynumbers
źródło
4

Jest taki klejnot jak quiet_assets który te błędy w twoich logach, jeśli tak jak ja nie chciałbyś dodawać tych plików do swojej aplikacji Rails:

https://github.com/davidcelis/quiet_safari

Davididis
źródło
To najlepsze rozwiązanie ... same frustracje i ogromne pliki dziennika, jeśli nie hamujesz rejestrowania. Rozmiary, o które prosiliśmy, zmieniają się, gdy Apple decyduje ... nas ścigać z kolejnymi wersjami tego samego cholernego favikonu.
vanboom,
4

Jeśli nie zależy Ci na tym, aby ikona wyglądała ładnie na wszelkiego rodzaju urządzeniach Apple, po prostu dodaj

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

do twojego config/routes.rbpliku i trochę icon.pngdo twojego publickatalogu. Przekierowanie do 404.htmlzamiast icon.pngdziała również.

Edward Khachatryan
źródło
Świetnie tu działało.
Wellington1993
3

W końcu rozwiązałem !! Jest to funkcja Web Clip na urządzeniach Mac. Jeśli użytkownik chce dodać witrynę w Dock o Desktop, żąda tej ikony.

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.

więcej informacji: https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html

jak rozwiązać ?: Dodaj ikonę, aby rozwiązać problem.

molavec
źródło
2

Alternatywnym rozwiązaniem jest po prostu dodanie trasy do trasy.rb

Zasadniczo łapie żądanie Apple i renderuje 404 z powrotem do klienta. W ten sposób twoje pliki dziennika nie są zagracone.

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

następnie dodaj metodę „apple_touch_not_found” do swojego application_controller.rb

# application_controller.rb
def apple_touch_not_found
  render  plain: 'apple-touch icons not found', status: 404
end
zrozumiałem
źródło
0

To samo dzieje się dla mnie. I tak, jak powiedział @Joao Leme, wydaje się, że jest to związane z zakładką użytkownika do strony głównej urządzenia.

Zauważyłem jednak, że pomimo błędu w dzienniku, dzieje się to za kulisami, a użytkownik nigdy nie widzi błędu. Zakładam, że urządzenie wysyła prośbę o ikonę dotykową specyficzną dla jego rozdzielczości (której nie ma), dopóki domyślnie nie zostanie ustawiona ogólna apple-touch-iconlubapple-touch-icon-precomposed , jeśli jest obecny, albo wygeneruje mały zrzut ekranu bieżącej strony.

FWIW, umieść ikony w katalogu / public.

Brian
źródło
1
Dodanie zdjęć nie rozwiązuje problemu. Zgłaszane są żądania dotyczące zasobów, które nie istnieją. Za każdym razem, gdy to żądanie się wydarzy, serwer odpowiada i zapisywany jest wpis dziennika. To nie jest wydajne.
Tass
-1

Po prostu utwórz pliki o zerowej wielkości, zwane odpowiednimi nazwami.

Żądanie zostanie spełnione bez dodatkowego transferu danych ani dalszych linii logowania.

Dave G.
źródło
1
Bardzo stara odpowiedź, ale podawanie pliku o zerowym rozmiarze nie jest w ogóle zalecane, ponieważ klip internetowy (link, który użytkownicy mogą utworzyć na ekranie głównym) pojawi się w kwadratowym polu bez zawartości. Chociaż nie podoba mi się skomplikowane anty-wzorce utworzone przez Apple, lepiej byłoby gromadzić błędy w pliku dziennika niż oferować użytkownikom shxt, jeśli takie istnieją.
Andrea Moro
-4

Spróbuj zmienić link z

/apple-touch-icon-precomposed.png 

do:

<%=asset_path "apple-touch-icon-precomposed.png" %>
Jju
źródło
Nigdzie nie podałem tego linku i nigdzie nie chcę renderować tego obrazu. Nie mam pojęcia, dlaczego próbuje się załadować ten zasób.
Akash Agrawal
Spróbuj znaleźć apple-touch-icon-precomposedw swoim katalogu projektu. Myślę, że ten link jest zawarty w szablonie układu, ale nie jestem pewien.
Jju
1
To jest standardowy obraz wymagany przez iOS; nie jest powiązany z żadnymi linkami w plikach projektu danej osoby.
Brad Koch
1
Ten obraz jest również wymagany przez moją maszynę do droidów, więc nie jestem pewien, czy jest natywny tylko dla urządzeń z iOS.
Tass
2
Dlaczego Apple nie może zadowolić się favicon.ico jak wszyscy inni?
Tony Payne,