如何防止浏览器发送favicon.ico请求?

796

我没有一个favicon.ico文件,但是我的浏览器总是请求它。

有没有可能阻止浏览器从我的网站请求这个favicon?也许在HTML头部中使用一些META-TAG可以实现吗?


35
好问题,但似乎最简单的解决方法就是添加一个有效的网站图标 :-) 这肯定只需要一分钟的时间,使您的网站立即看起来更专业? - Matt Wilko
7
您也可以拥有一个空的favicon.ico文件。这将停止请求(在第一次请求后),但不会导致浏览器呈现一个空白的favicon,而通常呈现其默认图标。 - mxcl
61
我必须说,我完全同意提问者的隐含观点:为什么需要将某些东西“额外”强制执行?此外,我们如何能够简单地向响应添加一些元数据,指示“行为与请求favicon.ico并收到404完全相同,只是不要实际发出请求,并且在此页面更改之前不再询问”。 - Daniel
67
这真是太痛苦了。我的网络服务只提供JSON,甚至没有基本的文件传输能力(首先,每个方法都需要认证令牌才能避免401/403错误)。我记录失败的请求以便稍后进行分析 - 日志不断涌现出对网站图标的请求。 - Basic
7
现在是2023年3月23日,你的原话是“它是2015年,有任何相关新闻吗?”。 - Jonathan Simon Prates
显示剩余11条评论
19个回答

5

对前面的答案进行进一步阐述,下面可能是从HTML文件本身提供的最短解决方案:
<link rel="shortcut icon" href="data:" />

已测试可行,在Chrome版本94.0.4606.81上没有错误消息或失败请求


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

1
你能详细说明一下吗?在 Node 的哪里? - john k
@johnktejik 这将使Node服务器发送HTTP标头。这个res对象是响应,所以每当您发送新页面、向用户发送新响应时,通常要先放置您的标头。 - renardesque
不行,已经在Firefox上测试过了。 - Abbas

2

个人在HTML head标签中使用了这个:

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

这个回答重复了2011年的回答https://dev59.com/5HM_5IYBdhLWcg3wlEBH#4691949 - TylerH

2
我需要阻止请求并显示图标,例如在Chrome中。
在标签中尝试的快速代码:
    <link rel="icon" type="image/png" sizes="16x16" href="data:image/png;base64,
    iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEU0OkArMjhobHEoPUPFEBIu
    O0L+AAC2FBZ2JyuNICOfGx7xAwTjCAlCNTvVDA1aLzQ3COjMAAAAVUlEQVQI12NgwAaCDSA0888G
    CItjn0szWGBJTVoGSCjWs8TleQCQYV95evdxkFT8Kpe0PLDi5WfKd4LUsN5zS1sKFolt8bwAZrCa
    GqNYJAgFDEpQAAAzmxafI4vZWwAAAABJRU5ErkJggg==" />

功效:

enter image description here

完整示例:

<!DOCTYPE html>
<html>
<head>
    <title><- this icon</title>
    <link rel="icon" type="image/png" sizes="16x16" href="data:image/png;base64,
        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEU0OkArMjhobHEoPUPFEBIu
        O0L+AAC2FBZ2JyuNICOfGx7xAwTjCAlCNTvVDA1aLzQ3COjMAAAAVUlEQVQI12NgwAaCDSA0888G
        CItjn0szWGBJTVoGSCjWs8TleQCQYV95evdxkFT8Kpe0PLDi5WfKd4LUsN5zS1sKFolt8bwAZrCa
        GqNYJAgFDEpQAAAzmxafI4vZWwAAAABJRU5ErkJggg==" />
</head>
<body>
    
    <h1>Check tab icon</h1>
    
</body>
</html>

虽然这很酷,但它会给你的代码增加不必要的混乱。以色列·曼齐的例子可能是最好的。 - JSON
2
@JSON 我是一名测试人员,有时需要快速原型制作以获得适当的结果。这就是为什么我发布了这个解决方案,已经有人喜欢这个答案 - 这是 SO 的目的,为人们提供选择,他们可以选择最适合自己问题的东西。SO 也适用于负面评价,所以感谢反馈! - pbaranski
这与一年前的 https://dev59.com/5HM_5IYBdhLWcg3wlEBH#66800034 有何不同? - TylerH
@TylerH的属性和可见大小,我想。会添加一些内容使其脱颖而出 :D - pbaranski

0
根据我们的经验,在请求favicon.ico时,Apache会崩溃。因此,我们在.htaccess文件中注释掉了额外的头部信息。
例如,我们有以下设置: Header set X-XSS-Protection "1; mode=block"
但是我们忘记在之前使用sudo a2enmod headers命令启用mod_headers模块。注释掉发送的额外头部信息解决了我们的favicon.ico问题。
我们还为开发设置了几个虚拟主机,只有在使用http://localhost并获取/favicon.ico时才会出现500 Internal Server Error错误。如果你运行curl -v http://localhost/favicon.ico,并收到关于主机名不在解析器缓存中的警告或类似的提示,那么你可能会遇到问题。
解决方法可能很简单,比如不获取(我们尝试过这种方法,但没有成功,因为我们的根本原因不同),或者查找apache2.conf或.htaccess中可能导致奇怪的500 Internal Server Error消息的指令。
我们发现问题发生得非常迅速,Apache的错误日志中没有任何有用的信息,我们花了整个上午不断更改一些细节,直到解决了忘记加载mod_headers模块时设置额外头部信息的问题!

-1
有时候会出现这个错误,当HTML中有一些被注释的代码,而浏览器正在尝试查找某些东西。就像在我的情况下,我在flask中有一个Web表单的注释代码,然后我就遇到了这个问题。
经过2个小时的努力,我通过以下方式解决了它:
1)我创建了一个新的Python环境,然后它在被注释的HTML行上抛出了一个错误,在此之前,我只收到了“GET /favicon.ico HTTP/1.1" 404”的错误信息。
2)有时候,当我有重复的代码,比如存在相同名称的Python文件时,我也会看到这个错误,尝试删除那些重复的代码。

-2

如果您没有使用HTML,而是由Flask或某些框架自动生成的,您可以在应用程序中添加一个虚拟路由,只返回虚拟文本以解决此问题。

或者......您可以添加网站图标 :)

例如Python Flask应用程序。

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

-2
我通过使用 Content-Security-Policy HTTP 响应头解决了这个问题。通过使用这个响应头,可以阻止浏览器继续进行媒体查询,比如图片(其他类型也可能)。我在响应中添加了以下标头: Content-Security-Policy: img-src 'none' 问题是它将阻止所有图像查询。如果您的 HTML 中有任何图像,它们将无法加载。在我的情况下,这很可能是 Firefox 中的一个错误,因为浏览器正在请求一个 Content-type 为 text/xml 的响应的 favicon.ico!
它还取决于实现此功能的浏览器是否在客户端强制执行。
请查看 https://content-security-policy.com 以获取 CSP 的完整指南。
干杯!

-16

你可以使用

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

这样就不会从服务器实际请求了。


1
那似乎会导致一些浏览器抛出可怕的错误消息-另外,您必须注意在可能通过HTTPS提供的页面上使用该技巧。 - Brighid McDonnell
6
使用 about:blank 更好。 - Luke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接