Favicon.ico isteklerini nasıl önleyebilirim?


551

Bir favicon.ico yok, ama IE her zaman bunun için bir istekte bulunuyor.

Tarayıcının sitemden favicon için bir istekte bulunmasını önlemek mümkün mü? HTML başlığında META-TAG olabilir mi?


21
+1 iyi soru ama en basit çözüm sadece geçerli bir favicon eklemek gibi görünüyor :-) elbette bu bir dakikalık bir iş ve siteniz hemen daha profesyonel görünüyor?
Matt Wilko

4
Boş bir favicon.ico dosyanız da olabilir. Bu, istekleri durdurur (ilkinden sonra), ancak tarayıcının genellikle varsayılan simgesi ne olursa olsun boş bir favicon oluşturmasına neden olmaz.
mxcl

38
Söylemcinin ima ettiği noktaya tamamen katıldığımı söylemeliyim: ekstra bir şey hangi amaçla zorunlu hale getirilir ? ve dahası, yanıta "bir favicon.ico talep ettiğiniz gibi davranın ve bir 404 aldınız gibi davranın, sadece aslında istekte bulunmayın ve tekrar sorma msgstr "bu sayfa değişir".
Daniel

36
Bu çok acı. Sadece JSON hizmet veren ve hatta bazı değişiklikler olmadan dosya sunma temel yeteneğine sahip olmayan bir web hizmetim var (bir başlangıç ​​için, her yöntem 401/403 önlemek için bir auth token gerektirir). Başarısız istekleri daha sonra analiz edebilmem için günlüğe kaydederim - günlükler sürekli olarak bir favicon isteği ile doludur.
Temel

3
2015. Bu konuda bir haber var mı?
Jonathan Prates

Yanıtlar:


575

Öncelikle bir web sayfasında bir favicon'a sahip olmanın iyi bir şey olduğunu söyleyeceğim (normalde).

Bununla birlikte, her zaman arzu edilmez ve bazen geliştiricilerin ekstra yükten kaçınmak için bir yola ihtiyaçları vardır. Örneğin, bir IFRAME göstermeden bir favicon isteyebilir. En kötüsü, Chrome ve Android'de bir IFRAME, favicons için 3 istek oluşturacak:

"GET /favicon.ico HTTP/1.1" 404 183
"GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 197
"GET /apple-touch-icon.png HTTP/1.1" 404 189

Aşağıdakiler veri URI'sini kullanır ve sahte favicon isteklerini önlemek için kullanılabilir:

<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon"> 

Referanslar için buraya bakınız:

Chrome hatası / davranışı büyük olasılıkla gelecek sürümlerde düzeltilecektir.

Oy vermeniz için hata bildirimi:

GÜNCELLEME 1:

Yorumlardan (jpic) Firefox> = 25, yukarıdaki sözdizimini artık sevmiyor gibi görünüyor. Firefox 27'de test ettim ve hala Webkit / Chrome'da çalışırken çalışmıyor.

İşte tüm yeni tarayıcıları kapsaması gereken yeni tarayıcı. Safari, Chrome ve Firefox'u test ettim:

<link rel="icon" href="data:;base64,=">

Ben sadece eski IE ve IE <8 sürümleri de dataURIs sevmiyorum çünkü "rel" öznitelik değeri "kısayol" adını bıraktı. IE8'de test edilmedi.

GÜNCELLEME 2:

HTML5 ile doğrulamak için belgenize ihtiyacınız varsa bunun yerine şunu kullanın:

<link rel="icon" href="data:;base64,iVBORw0KGgo=">

1
Parlak. Bu kadar az oy aldığınız gerçeğini tahmin etmeliyim ki, sadece soru sorulduğundan beri birkaç yıl geçti ve daha az akıllı cevapların oy toplamak için daha fazla zamanı vardı.
iconoclast

21
UPDATE 2'nizde Lollipop ile ilgili sorunlar vardı ... ekleme <link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=">sorunu çözüyor gibi görünüyor.
Alko

2
Eğer doğru anladıysam data:image/png;base64,iVBORw0KGgo=, tarayıcıda açabilirim , favicon.icoaka olarak kaydedebilirim . PNG dosyasını boş bırakın ve web sitesi kökünde saklayın. Sağ?
Martin

3
@Alko Bu boş PNG dosyası hala geçersiz. Bu sadece boş bir dosyayı tanımlayan bir veri URL'si oluşturmakla ilgili ise, şunu kullanın: <link rel = "icon" href = "data:,">
vog

2
Dizin.html dosyasında referans olmasa bile tarayıcılar favicon isteme eğilimindedir, bu nedenle bu çözüm bunu nasıl önler? Özellikle, Firefox'u bir alanı ziyaret ettiğiniz anda talep etme konusunda çok agresif olduğunu gördüm. Diğer tarayıcılar daha sonra yapabilir, belki dizin dosyası başlığı yükledikten sonra (tarayıcıların içleri hakkında daha fazla bilgiye sahip biri lütfen yorum yapın). Bir
favicon'a sahip olmamanın

131

<head>HTML dosyanızın bölümüne aşağıdaki satırı eklemeniz yeterlidir:

<link rel="icon" href="data:,">

Bu çözümün özellikleri:

  • % 100 geçerli HTML5
  • çok kısa
  • IE 8 ve daha eski sürümlerden herhangi bir tuhaflığa maruz kalmaz
  • tarayıcının mevcut HTML kodunu favicon olarak yorumlamasını sağlamaz (durum böyle olur href="#")

4
Sadece yerel bir projede krom cihazlarını kapatmaya çalışıyorsanız, bu en kolay ve en temiz yoldur.
Andrew

Lütfen bunu genişletin. Sık kullanılan simgesi isteğini durdurmak için bunu HTML dosyama eklemem gerekir mi?
Aakash Verma

2
@AakashVerma Evet, hepsi bu. Başka bir şeye gerek yok. (Sitenizin Internet Explorer 8 veya daha eski sürümlerini desteklemesi gerekmedikçe.) Cevabımı buna göre geliştirdim.
vog

@asynts Ne demek istiyorsun reserves space?
mvorisek

@Andrew Chrome DevTools'un bu çözümle ilgili sorunu nedir?
Flinsch

47

Bunu gördüğüme inanıyorum (Test etmedim veya kişisel olarak kullanmadım):

<link rel="shortcut icon" href="#" />

Benzer tecrübesi olan var mı?

DÜZENLE:

Yukarıdaki kod parçasını yeni test ettim ve zorunlu tam yenilemede, Fiddler'de hiçbir favicon isteği görülmedi. IE8 (IE7 standartları olarak uyumluluk modu) ve FF 3.6'ya karşı test ettim.


1
Testlerim de bu hilenin işe yaradığını gösteriyor. Ancak, hrefdinamik (önbelleğe alınmamış) bir sayfanın iki kez istenmediğinden emin olmak için önceden yüklediğiniz bazı statik (önbelleğe alınmış) kaynaklara (ör. Css veya komut dosyası) bağlantı olurdu . ( href="#"Teknik olarak mevcut web sayfasını işaret ettiği için güvende olmak için).
Már Örlygsson

2
Safari'de denedim. Favicon isteği tekrar barındırma sayfasına gider.
Morgan Cheng

27
Bunu önermem, çünkü tarayıcıyı (Safari5 / Mac, belki de diğerleri) sunucudan web sayfasını iki kez istemektedir.
Manav

2
@Manav Safari6 / Mac'te durum böyle değil.
Marcel

2
BU BOM! Teşekkürler: D Şimdi bu can sıkıcı hatayı görmeyeceğim, nihayet bu simgeyi hehe yapmaya gelene kadar.
Leon Gaban

39

Yapamazsın. Yapabileceğiniz tek şey bu görüntüyü olabildiğince küçük yapmak ve gelecekte bazı önbellek geçersiz kılma başlıklarını ( Expires, Cache-Control) ayarlamaktır . İşte Yahoo! favicon.ico isteklerini söylemek zorundadır .


7
Bir faviconu olmadığını söyledi. Bundan daha küçük olamazlar. Ve varolmayan dosyaları önbelleğe almanın bir anlamı yoktur.
innaM

16
Eğer bir favicon yoksa o zaman bir tane yapmak gerekir, bu benim açımdan. Bundan daha iyi bir çözüm yok. Mantıksal değil mi? İstekleri durdurma imkanı yoksa , önbelleğe alma özelliğini kullanmadığınız sürece ne yaparsınız?
Ionuț G. Stan

5

Favicon.ico dosyasına erişimi engellemek için .htaccess veya sunucu yönergelerini kullanabilirsiniz, ancak sunucu tarayıcıya erişim reddedildi yanıtı gönderir ve bu yine de sayfa erişimini yavaşlatır.

Bir kullanıcı sitenize döndüğünde tarayıcı önbelleğinde kalmasını sağlayarak favicon.ico isteminde bulunan tarayıcıyı durdurabilirsiniz.

İlk olarak, küçük bir favicon.ico görüntüsü sağlayın, boş olabilir, ancak mümkün olduğunca küçük olabilir. 200 baytın altında siyah beyaz bir tane yaptım. Ardından, .htaccess veya sunucu yönergelerini kullanarak Expires üstbilgisini gelecekte bir veya iki ay olarak ayarlayın. Aynı kullanıcı sitenize geri döndüğünde, tarayıcı önbelleğinden yüklenir ve sitenize hiçbir istek gitmez. Sunucu günlüklerinde artık 404 yok.

Tam bir Apache sunucusu veya sanal bir sunucu üzerinde kontrolünüz varsa bunu yapabilirsiniz: -

Sunucu belgesi kökü / var / www / html ise, /etc/httpd/conf/httpd.conf:-

Alias /favicon.ico "/var/www/html/favicon.ico"
<Directory "/var/www/html">
    <Files favicon.ico>
       ExpiresActive On
       ExpiresDefault "access plus 1 month"
    </Files>
</Directory>

Daha sonra tek bir favicon.ico, takma ad kullandığınızdan beri tüm sanal olarak barındırılan siteler için çalışır. Kullanıcılar ziyaret ettikten sonra bir ay boyunca tarayıcı önbelleğinden çekilir.

.Htaccess için bunun çalıştığı bildirildi (benim tarafımdan kontrol edilmedi): -

AddType image/x-icon .ico
ExpiresActive On
ExpiresByType image/x-icon "access plus 1 month"

Modülü etkinleştirmeyi unutmayın: ~ / etc / apache2 # a2enmod'un süresi doluyor & servis apache2 restart
Sino Boeckmann


4

nginx kullanıyorsanız

# skip favicon.ico
#
location = /favicon.ico {
    access_log off;
    return 204;
}

Bu isteği engellemiyor, ancak alternatif olarak beğeniyorum.
QasimK

Elbette, web sunucusunu kontrol edebiliyorsanız.
jbruni

1

Node.js'de,

res.writeHead(200, {'Content-Type': 'text/plain', 'Link': 'rel="shortcut icon" href="#"'} );

0

Deneyimlerimize göre, Apache'nin favicon.ico'nun isteği üzerine düşmesiyle, .htaccess dosyasındaki ek başlıkları yorumladık.

Örneğin, X-XSS Koruması "1; mode = block" başlık setine sahiptik

... ama önceden sudo a2enmod başlıklarını unutmuştuk. Gönderilen fazladan başlıkların yorumlanması, favicon.ico sorunumuzu çözdü.

Ayrıca, geliştirme için ayarlanmış birkaç sanal ana makinemiz vardı ve yalnızca http: // localhost ve /favicon.ico getirilirken 500 Dahili Sunucu Hatası ile başarısız olduk. "Curl -v http: //localhost/favicon.ico " komutunu çalıştırırsanız ve ana bilgisayar adının çözümleyici önbelleğinde bulunmadığı veya bununla ilgili bir şey hakkında bir uyarı alırsanız, sorunlarla karşılaşabilirsiniz.

Getirmemek kadar basit olabilir (bunu denedik ve işe yaramadı, çünkü kök nedenimiz farklıydı) veya garip 500 Dahili Sunucu Hata mesajlarına neden olabilecek apache2.conf veya .htaccess içindeki yönergeleri arayın.

Biz çok hızlı başarısız Apache hata günlükleri ne olursa olsun yararlı bir şey bulunamadı ve biz mod_headers yüklü unutmuştu zaman ekstra üstbilgileri ayarlama sorunu çözülene kadar bütün sabah burada ve orada küçük şeyler değiştirerek geçirdi!


0

Bazen bu hata, HTML'nin yorumlanmış bir kodu olduğunda ve tarayıcı bir şey aramaya çalışırken ortaya çıkar. Benim durumumda olduğu gibi ben bir web formu için flask kod yorum vardı ve ben bunu alıyordu.

2 saat geçirdikten sonra aşağıdaki şekillerde çözdüm:

1) Yeni bir python ortamı oluşturdum ve yorum yapılan HTML satırına bir hata attım, bundan önce sadece 'GET /favicon.ico HTTP / 1.1 "404' hatası atıldı

2) Bazen, aynı ada sahip python dosyası gibi yinelenen bir kodum olduğunda, bu hatayı da gördüm, bunları da kaldırmayı deneyin


-10

Kullanabilirsin

<link rel="shortcut icon" href="http://localhost/" />

Bu şekilde sunucudan istenmez.


1
Bazı tarayıcıların korkunç hata mesajları atmasına neden olabileceği anlaşılıyor - ayrıca HTTPS üzerinden sunulabilecek sayfalarda bu numarayı kullanmak için dikkat etmeniz gerekecek.
Brighid McDonnell

6
About: blank kullanmak daha iyidir.
Luke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.