首页 文章

如何防止favicon.ico请求?

提问于
浏览
397

我没有favicon.ico,但IE总是提出请求 .

是否可以阻止浏览器请求我的网站的favicon?也许HTML Headers 中有一些META-TAG?

10 回答

  • 458

    我首先要说的是,在网页中使用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">
    

    有关参考,请参阅此处

    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=">
    
  • -10

    我相信我已经看过了这个(我没有测试过或亲自使用它):

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

    有没有类似的经历?

    EDIT:

    我刚刚测试了上面的代码片段并且在强制完全刷新时,在Fiddler中没有看到favicon请求 . 我针对IE8(Compat模式为IE7标准)和FF 3.6进行了测试 .

  • -5

    只需将以下行添加到HTML文件的 <head> 部分:

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

    该解决方案的特点:

    • 100%有效HTML5

    • 很短

    • 不会引起IE 8及更早版本的任何怪癖

    • 不会使浏览器将当前的HTML代码解释为favicon( href="#" 就是这种情况)

  • 39

    你不能 . 您所能做的就是使该图像尽可能小,并在将来设置一些缓存失效 Headers ( ExpiresCache-Control ) . 这是关于favicon.ico请求的what Yahoo! has to say .

  • 39

    您可以使用.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"
    
  • 34

    一个非常简单的解决方案是将以下代码放在 .htaccess 中 . 我有同样的问题,它解决了我的问题 .

    <IfModule mod_alias.c>
        RedirectMatch 403 favicon.ico
    </IfModule>
    

    参考:http://perishablepress.com/block-favicon-url-404-requests/

  • 0

    如果你使用nginx

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

    根据我们的经验,随着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 的问题!

  • 2

    我建议将网站放入.zip /压缩文件夹 . 这是一个示例网页在.zip /压缩文件夹中的样子:
    WEBSITE IN .ZIP/COMPRESSED FOLDER

    这是普通文件夹中的样子:
    WEBSITE IN NORMAL FOLDER

  • 3

    你可以用

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

    这样,它实际上不会从服务器请求 .

相关问题