小智 531
我首先要说的是,在网页中使用favicon是一件好事(通常).
然而,并不总是需要它,有时开发人员需要一种方法来避免额外的有效载荷.例如,IFRAME会在不显示的情况下请求图标.最糟糕的是,在Chrome和Android中,IFRAME会产生3个关于favicon的请求:
"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
Run Code Online (Sandbox Code Playgroud)
以下使用数据URI,可用于避免假的favicon请求:
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
Run Code Online (Sandbox Code Playgroud)
有关参考,请参阅此处
Chrome bug /行为可能会在即将推出的版本中修复.
以下是您投票的错误提交:
更新1:
从评论(jpic)看起来好像Firefox> = 25不再喜欢上面的语法了.我在Firefox 27上进行了测试,但它仍然可以在Webkit/Chrome上运行.
所以这里应该涵盖所有最近的浏览器.我测试了Safari,Chrome和Firefox:
<link rel="icon" href="data:;base64,=">
Run Code Online (Sandbox Code Playgroud)
我从"rel"属性值中省略了"快捷方式"名称,因为这仅适用于较旧的IE,IE <8的版本也不喜欢dataURI.没有在IE8上测试过.
更新2:
如果您需要对HTML5进行验证,请使用以下内容:
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
Run Code Online (Sandbox Code Playgroud)
vog*_*vog 96
只需将以下行添加到<head>HTML文件的部分:
<link rel="icon" href="data:,">
Run Code Online (Sandbox Code Playgroud)
该解决方案的特点:
href="#")mlh*_*Dev 45
我相信我见过这个 (我没有测试过或亲自使用它):
<link rel="shortcut icon" href="#" />
Run Code Online (Sandbox Code Playgroud)
有没有类似的经历?
编辑:
我刚刚测试了上面的代码片段并且在强制完全刷新时,在Fiddler中没有看到favicon请求.我针对IE8(Compat模式为IE7标准)和FF 3.6进行了测试.
Ion*_*tan 36
你不能.您所能做的就是使该图像尽可能小,并在将来设置一些缓存失效标题(Expires,Cache-Control).这就是Yahoo! 不得不说有关favicon.ico的请求.
如果你使用 nginx
# skip favicon.ico
#
location = /favicon.ico {
access_log off;
return 204;
}
Run Code Online (Sandbox Code Playgroud)
出于测试目的暂时阻止这些的最简单方法是通过右键单击页面上的任意位置并单击检查或按下Ctrl+Shift+j然后转到网络选项卡,然后重新加载将发送所有请求您的页面应该包括那个烦人的 favicon.ico。您现在只需右键单击 favicon.ico 请求,然后单击“阻止请求 URL”。
以上所有答案均适用于控制应用程序源代码的开发人员。如果您是系统管理员,正在计算我们的负载平衡器或代理配置,并且对这个 favicon.ico 恶作剧感到恼火,那么这个简单的技巧会做得更好。这个答案是针对 Chrome 的,但我认为应该有一个类似的替代方案,你可以为 Firefox/Opera/Tor/任何其他浏览器找出 :)
小智 5
您可以使用.htaccess或服务器指令拒绝对favicon.ico的访问,但是服务器将向浏览器发送拒绝访问的回复,这仍然会降低页面访问速度。
当用户返回您的站点时,可以通过使其停留在浏览器缓存中来停止浏览器请求favicon.ico。
首先,提供一个小的favicon.ico图像,该图像可以为空白,但应尽可能小。我在200个字节以下制作了一个黑白的。然后,使用.htaccess或服务器指令,将文件Expires标头设置为将来的一两个月。当同一用户返回您的站点时,它将从浏览器缓存中加载,并且不会有任何请求进入您的站点。服务器日志中也没有更多的404。
如果您可以控制完整的Apache服务器或虚拟服务器,则可以执行以下操作:
如果服务器文档的根目录是/ var / www / html,则将其添加到/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>
Run Code Online (Sandbox Code Playgroud)
然后,一个favicon.ico将对所有虚拟托管站点起作用,因为您对其进行了别名。用户访问后一个月,它将从浏览器缓存中提取。
对于.htaccess,据报道该文件有效(我未检查):-
AddType image/x-icon .ico
ExpiresActive On
ExpiresByType image/x-icon "access plus 1 month"
Run Code Online (Sandbox Code Playgroud)
一个非常简单的解决方案是将以下代码放入您的.htaccess. 我有同样的问题,它解决了我的问题。
<IfModule mod_alias.c>
RedirectMatch 403 favicon.ico
</IfModule>
Run Code Online (Sandbox Code Playgroud)
参考:http : //perishablepress.com/block-favicon-url-404-requests/
小智 5
把它放到你的 HTML 头中:
<link rel="icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4//8/AAX+Av7czFnnAAAAAElFTkSuQmCC">
Run Code Online (Sandbox Code Playgroud)
这比其他答案大一点,但确实包含一个实际有效的 PNG 图像(1x1 像素白色)。
详细说明之前的答案,这可能是 HTML 文件本身最短的解决方案:
<link rel="shortcut icon" href="data:" />
在 Chrome 版本 94.0.4606.81 上测试工作正常,没有错误消息或失败的请求
小智 5
只需简单地使用:
<link rel="shortcut icon" href="#" type="image/x-icon">
Run Code Online (Sandbox Code Playgroud)
什么也没有显示!!!!
| 归档时间: |
|
| 查看次数: |
281655 次 |
| 最近记录: |