我没有favicon.ico,但IE总是提出请求 .
是否可以阻止浏览器请求我的网站的favicon?也许HTML Headers 中有一些META-TAG?
我首先要说的是,在网页中使用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
以下使用数据URI,可用于避免假的favicon请求:
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
有关参考,请参阅此处
https://github.com/h5bp/html5-boilerplate/issues/1103
https://twitter.com/diegoperini/status/4882543836930048
Chrome bug /行为可能会在即将推出的版本中修复 .
以下是您投票的错误提交:
UPDATE 1:
从评论(jpic)看起来好像Firefox> = 25不再喜欢上面的语法了 . 我在Firefox 27上进行了测试,但它仍然可以在Webkit / Chrome上运行 .
所以这里应该涵盖所有最近的浏览器 . 我测试了Safari,Chrome和Firefox:
<link rel="icon" href="data:;base64,=">
我从“rel”属性值中省略了“快捷方式”名称,因为这仅适用于较旧的IE,IE <8的版本也不喜欢dataURI . 没有在IE8上测试过 .
UPDATE 2:
如果您需要对HTML5进行验证,请使用以下内容:
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
我相信我已经看过了这个(我没有测试过或亲自使用它):
<link rel="shortcut icon" href="#" />
有没有类似的经历?
EDIT:
我刚刚测试了上面的代码片段并且在强制完全刷新时,在Fiddler中没有看到favicon请求 . 我针对IE8(Compat模式为IE7标准)和FF 3.6进行了测试 .
只需将以下行添加到HTML文件的 <head> 部分:
<head>
<link rel="icon" href="data:,">
该解决方案的特点:
100%有效HTML5
很短
不会引起IE 8及更早版本的任何怪癖
不会使浏览器将当前的HTML代码解释为favicon( href="#" 就是这种情况)
href="#"
你不能 . 您所能做的就是使该图像尽可能小,并在将来设置一些缓存失效 Headers ( Expires , Cache-Control ) . 这是关于favicon.ico请求的what Yahoo! has to say .
Expires
Cache-Control
您可以使用.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>
然后,单个favicon.ico将适用于所有虚拟托管站点,因为您对它进行别名处理 . 用户访问后,它将从浏览器缓存中抽出一个月 .
对于.htaccess,据报道这是有效的(我没有查看): -
AddType image/x-icon .ico ExpiresActive On ExpiresByType image/x-icon "access plus 1 month"
一个非常简单的解决方案是将以下代码放在 .htaccess 中 . 我有同样的问题,它解决了我的问题 .
.htaccess
<IfModule mod_alias.c> RedirectMatch 403 favicon.ico </IfModule>
参考:http://perishablepress.com/block-favicon-url-404-requests/
如果你使用nginx
# skip favicon.ico # location = /favicon.ico { access_log off; return 204; }
根据我们的经验,随着Apache在favicon.ico的请求下失败,我们在.htaccess文件中注释掉了额外的标头 .
例如,我们将Header设置为X-XSS-Protection“1; mode = block”
...但我们忘记事先sudo a2enmod Headers . 评论发送的额外 Headers 解决了我们的favicon.ico问题 .
我们还设置了几个用于开发的虚拟主机,并且在使用http://localhost和获取/favicon.ico时仅使用500内部服务器错误失败 . 如果您运行“curl -v http://localhost/favicon.ico”并收到有关主机名不在解析程序缓存中的警告或类似的问题,则可能会遇到问题 .
它可能就像没有提取一样简单(我们尝试了它并且它不起作用,因为我们的根本原因是不同的)或者在apache2.conf或.htaccess中查找可能导致的指令奇怪的500内部服务器错误消息 .
我们发现它失败的速度很快,在Apache的错误日志中没有任何用处,花了一整个上午在这里和那里改变小东西,直到我们解决了在忘记加载mod_headers时设置额外 Headers 的问题!
我建议将网站放入.zip /压缩文件夹 . 这是一个示例网页在.zip /压缩文件夹中的样子:
这是普通文件夹中的样子:
你可以用
<link rel="shortcut icon" href="http://localhost/" />
这样,它实际上不会从服务器请求 .
10 回答
我首先要说的是,在网页中使用favicon是一件好事(通常) .
然而,并不总是需要它,有时开发人员需要一种方法来避免额外的有效载荷 . 例如,IFRAME会在不显示的情况下请求图标 . 最糟糕的是,在Chrome和Android中,IFRAME会产生3个关于favicon的请求:
以下使用数据URI,可用于避免假的favicon请求:
有关参考,请参阅此处
https://github.com/h5bp/html5-boilerplate/issues/1103
https://twitter.com/diegoperini/status/4882543836930048
Chrome bug /行为可能会在即将推出的版本中修复 .
以下是您投票的错误提交:
UPDATE 1:
从评论(jpic)看起来好像Firefox> = 25不再喜欢上面的语法了 . 我在Firefox 27上进行了测试,但它仍然可以在Webkit / Chrome上运行 .
所以这里应该涵盖所有最近的浏览器 . 我测试了Safari,Chrome和Firefox:
我从“rel”属性值中省略了“快捷方式”名称,因为这仅适用于较旧的IE,IE <8的版本也不喜欢dataURI . 没有在IE8上测试过 .
UPDATE 2:
如果您需要对HTML5进行验证,请使用以下内容:
我相信我已经看过了这个(我没有测试过或亲自使用它):
有没有类似的经历?
EDIT:
我刚刚测试了上面的代码片段并且在强制完全刷新时,在Fiddler中没有看到favicon请求 . 我针对IE8(Compat模式为IE7标准)和FF 3.6进行了测试 .
只需将以下行添加到HTML文件的
<head>
部分:该解决方案的特点:
100%有效HTML5
很短
不会引起IE 8及更早版本的任何怪癖
不会使浏览器将当前的HTML代码解释为favicon(
href="#"
就是这种情况)你不能 . 您所能做的就是使该图像尽可能小,并在将来设置一些缓存失效 Headers (
Expires
,Cache-Control
) . 这是关于favicon.ico请求的what Yahoo! has to say .您可以使用.htaccess或服务器指令拒绝访问favicon.ico,但服务器将向浏览器发送拒绝访问的回复,这仍然会降低页面访问速度 .
当用户返回您的站点时,您可以停止浏览器请求favicon.ico,使其保留在浏览器缓存中 .
首先,提供一个小的favicon.ico图像,可能是空白的,但尽可能小 . 我制作了一个200字节以下的黑白电影 . 然后,使用.htaccess或服务器指令,将文件Expires标头设置为将来一两个月 . 当同一用户返回您的站点时,它将从浏览器缓存加载,并且没有请求将转到您的站点 . 服务器日志中不再有404 .
如果您可以控制完整的Apache服务器或虚拟服务器,则可以执行以下操作: -
如果服务器文档根目录是/ var / www / html,那么将其添加到/etc/httpd/conf/httpd.conf:-
然后,单个favicon.ico将适用于所有虚拟托管站点,因为您对它进行别名处理 . 用户访问后,它将从浏览器缓存中抽出一个月 .
对于.htaccess,据报道这是有效的(我没有查看): -
一个非常简单的解决方案是将以下代码放在
.htaccess
中 . 我有同样的问题,它解决了我的问题 .参考:http://perishablepress.com/block-favicon-url-404-requests/
如果你使用nginx
根据我们的经验,随着Apache在favicon.ico的请求下失败,我们在.htaccess文件中注释掉了额外的标头 .
例如,我们将Header设置为X-XSS-Protection“1; mode = block”
...但我们忘记事先sudo a2enmod Headers . 评论发送的额外 Headers 解决了我们的favicon.ico问题 .
我们还设置了几个用于开发的虚拟主机,并且在使用http://localhost和获取/favicon.ico时仅使用500内部服务器错误失败 . 如果您运行“curl -v http://localhost/favicon.ico”并收到有关主机名不在解析程序缓存中的警告或类似的问题,则可能会遇到问题 .
它可能就像没有提取一样简单(我们尝试了它并且它不起作用,因为我们的根本原因是不同的)或者在apache2.conf或.htaccess中查找可能导致的指令奇怪的500内部服务器错误消息 .
我们发现它失败的速度很快,在Apache的错误日志中没有任何用处,花了一整个上午在这里和那里改变小东西,直到我们解决了在忘记加载mod_headers时设置额外 Headers 的问题!
我建议将网站放入.zip /压缩文件夹 . 这是一个示例网页在.zip /压缩文件夹中的样子:
这是普通文件夹中的样子:
你可以用
这样,它实际上不会从服务器请求 .