我没有favicon.ico,但我的浏览器总是发出请求。

是否有可能阻止浏览器从我的网站制作favicon的请求?也许是HTML头中的META-TAG ?


当前回答

把这个放进你的HTML头:

<link rel="icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4//8/AAX+Av7czFnnAAAAAElFTkSuQmCC">

这个答案比其他答案稍大一些,但确实包含一个实际有效的PNG图像(1x1像素白色)。

其他回答

你可以使用.htaccess或服务器指令来拒绝访问favicon.ico,但是服务器会向浏览器发送拒绝访问的回复,这仍然会减慢页面访问。

当用户返回站点时,可以通过将favicon.ico保留在浏览器缓存中来停止浏览器请求favicon.ico。

首先,提供一个小的favicon.ico图像,可以是空白的,但要尽可能小。我做了一个黑白的,不到200字节。然后,使用.htaccess或server指令,将文件的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"

如果你不使用HTML,它是由Flask或一些框架自动生成的,你可以在应用程序中添加一个虚拟路由,只返回虚拟文本来修复这个问题。

或 . . . 你可以添加图标:)

Eg for Python Flask Application。

@app.route('/favicon.ico')
def favicon():
    return 'dummy', 200

为了测试目的,暂时阻止这些最简单的方法是在chrome中打开检查页面,右键单击页面上的任何位置并单击检查,或者按Ctrl+Shift+j,然后转到网络选项卡,然后重新加载页面,这将发送您的页面应该发出的所有请求,包括恼人的favicon.ico。您现在可以简单地右键单击favicon.ico请求,然后单击“阻止请求URL”。

以上所有答案都适用于控制应用程序源代码的开发者。如果您是一名系统管理员,正在计算负载平衡器或代理配置,并对favicon.ico的恶作剧感到恼火,那么这个简单的技巧可以更好地发挥作用。这个答案是针对Chrome的,但我认为应该有一个类似的替代方案,你会发现Firefox/Opera/Tor/任何其他浏览器:)

详细说明前面的答案,这可能是HTML文件本身的最短解决方案: <link rel="快捷图标" href="data:" /> .

测试工作,没有错误消息或失败的请求在Chrome版本94.0.4606.81

我通过使用内容安全策略HTTP响应报头解决了这个问题。通过使用这个,可以阻止浏览器进一步的媒体查询,如图像(其他类型也可以)。我添加了以下头的响应:

内容安全策略:img-src 'none'

问题是它会阻塞所有的图像查询。如果您的HTML有任何图像,它们将不会被加载。在我的情况下,这很可能是Firefox中的一个错误,因为浏览器正在请求favicon.ico的响应,其Content-type是text/xml!

它还取决于在客户端强制执行的实现此特性的浏览器。

访问https://content-security-policy.com获取CSP的完整指南。

干杯!