ChatGPT解决这个技术问题 Extra ChatGPT

如何为小图标保存另一个宝贵的 HTTP 请求?

每个人都知道如何在他们的 HTML 中设置 favicon.ico 链接:

<link rel="shortcut icon" href="http://hi.org/icon.ico" type="image/x-icon">

但愚蠢的是,对于一个只有几个字节的小图标,我们还需要另一个可能会降低速度的 HTTP 请求。

所以我想知道,我怎样才能使网站图标成为可用精灵的一部分(例如,background-position=0px -200px;),它可以兼作网站其余部分的徽标,以加快网站速度并保存珍贵和有价值的东西HTTP 请求。我们怎样才能让它与我们的标志和其他艺术品一起进入现有的精灵图像?

还没有一种方法可以将 .css/.js/.png/.html 组合成一个优化的流,这不是很愚蠢吗?你会认为现在有人会想出这个主意
@Richard 相关:Multipart responses 和 Google 提出了一项新的优化网络协议来解决这个问题,我忘记了它的名字... 编辑:它被命名为 SPDY。但这显然是遥远的未来。
@Richard aka cyberkiwi,您可以将所有内容放在一个 html 文件中,其中包含图像的 data: 值和内联脚本。
顺便说一句,漂亮的素描人:)
看起来这就是您获得其他金徽章的方式,您不断更新同一个问题的赏金,直到您获得 100 次投票,然后您就获得了金徽章。光滑。

J
James Anderson

我认为在大多数情况下它不会导致另一个 HTTP 请求,因为它们通常在第一次访问后被转储到浏览器的缓存中。

这实际上比任何提议的“解决方案”都更有效。


这是唯一明智的答案。这是一个不需要修复的非问题。
詹姆斯,我的解决方案实际上只是一种可能性,但我永远不会真正推荐给某人。但是,似乎大多数浏览器会在新的浏览器会话开始时为 favicon 发出新的 HTTP 请求。而且,它并不总是返回 304。
即使浏览器在浏览器缓存中,浏览器仍会进行 HEAD 调用,因此您仍然会有 HTTP 请求的开销。
实际上一切都取决于浏览器。他们中的大多数人总是会在某些位置寻找网站图标,即使页面没有提到它,并且每次刷新都会调用 HEAD。
favicon 需要一个长的过期标题,就像任何好的静态资源一样。这样,即使是 HEAD 调用也被抑制。
P
Peter Mortensen

@yc's answer 的一个小改进是从通常会使用和缓存的 JavaScript 文件中注入 Base64 编码的网站图标,并通过在相关 { 4}标签。

这种技术避免了额外的 http 请求,并被证实可以在 Windows 7 上的最新版本的 Chrome、Firefox 和 Opera 中工作。但至少在 Internet Explorer 9 中似乎不起作用。

文件 index.html

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <!-- Suppress browser request for favicon.ico -->
        <link rel="shortcut icon"type="image/x-icon" href="data:image/x-icon;,">
        <script src="script.js"></script>
...

文件 script.js

var favIcon = "\
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABrUlEQVR42mNkwAOepOgxMTD9mwhk\
[...truncated for brevity...]
IALgNIBUQBUDAFi2whGNUZ3eAAAAAElFTkSuQmCC";

var docHead = document.getElementsByTagName('head')[0];
var newLink = document.createElement('link');
newLink.rel = 'shortcut icon';
newLink.href = 'data:image/png;base64,'+favIcon;
docHead.appendChild(newLink);

/* Other JavaScript code would normally be in here too. */

演示:turi.co/up/favicon.html


+1 美丽的缓存突破@Marcel。 PS 我的 .ico 文件的 HTTP Headers Response 中的字符几乎与我的图标大小相同!你觉得如何?
@Sam:我注意到 Stack Overflow favicon.ico 文件的 PNG equivalent 的 base64 大小只有一半。美观紧凑。
eeehm 我不确定我是否理解你的意思:'文件是......的一半大小?像icon.png这样的PNG文件?或者你的意思是当它的png格式而不是图标格式或gif时,它的base64等价物更小?好奇的。队友的欢呼声!
@Sam:我将 this PNG 的 base64 与此 ICO file 的 base64 进行比较。在我上面的示例代码中使用的 PNG 版本是大小的一半。
哦,我明白了,这使您的 base 64 答案和 base64 PNG 格式的一般使用成为首选,对吗?
P
Peter Mortensen

您可以尝试 data URI。没有 HTTP 请求!

<link id="favicon" rel="shortcut icon" type="image/png" href="data:image/png;base64,....==">

除非您的页面具有静态缓存,否则您的网站图标将无法被缓存,并且根据您的网站图标图像的大小,您的源代码可能会因此变得臃肿。

Data URI favicons 似乎可以在大多数现代浏览器中使用;我让它在 Mac 上的最新版本的 Chrome、Firefox 和 Safari 中工作。似乎在 Internet Explorer 和某些版本的 Opera 中不起作用。

如果您担心旧的 Internet Explorer 版本(现在您可能不应该这样),您可以包含一个 Internet Explorer 条件注释,它会以传统方式加载实际的 favicon.ico,因为旧的 Internet Explorer 似乎不支持数据 URI 图标。

`<!--[if IE ]><link rel="shortcut icon" href="http://example.com/favicon.ico"  type="image/x-icon" /><![endif]--> `

在你的根目录中包含 favicon.ico 文件,以覆盖将请求它的浏览器,因为对于那些浏览器,如果他们已经在检查,无论你做什么,你最好不要用 404 响应浪费 HTTP 请求.

您也可以只使用另一个受欢迎的网站的图标,该网站可能会缓存其图标,例如 http://google.com/favicon.ico,以便从缓存中提供。

正如评论者所指出的,仅仅因为你可以这样做并不意味着你应该这样做,因为有些浏览器会请求 favicon.ico,而不管我们设计的技巧如何。与执行 gzip 压缩、为静态内容使用远期过期标头、缩小 JavaScript 文件、将背景图像放入 sprite 或数据 URI 等操作所节省的成本相比,这样做所节省的开销是微不足道的,从 CDN 提供静态文件等。


@Pekka 是的,它不是一个真正实用的解决方案,因为未缓存页面上的数据 URI 额外字节权重可能会超过该 HTTP 请求的权重。也许 OP 可以将 favicon 异步注入 DOM。
@Sam我很抱歉,我现在明白@yc 的意思,我的错误。当然,您可以通过 JavaScript 完美地访问浏览器中的 <link rel> 元素,这应该是可能的。我什至见过 a game 以这种方式编程......但是它似乎也不能在 IE 中工作,而且它可能不会阻止默认的 /favicon.ico 查找请求
@Pekka,我明白了。 PS这是一个令人难以置信的游戏!让我的整个屏幕房地产蒙羞,因为你只需要 16x16 像素哈哈。这个超链接打开了一些关于该网站图标实际可能的可能性。
如果缺少 favicon 声明,所有浏览器将自动请求默认 URL /favicon.ico,以盲目尝试定位它。因此,如果您忽略图标 <link>(稍后通过 Javascript 添加它),您可能只会让事情变得更糟。
只需使用 favicon.ico 来存储您的透明 gif :)
R
Rounin - Standing with Ukraine

2020 年的杀手级解决方案

这个解决方案必然是在最初提出问题九年后才出现的,因为直到最近,大多数浏览器还不能处理 .svg 格式的网站图标。

现在不是这样了。

请参阅:https://caniuse.com/#feat=link-icon-svg

1) 选择 SVG 作为 Favicon 格式

现在,在 2020 年 6 月,这些浏览器可以处理 SVG Favicon:

铬合金

火狐

边缘

歌剧

安卓版 Chrome

KaiOS浏览器

请注意,这些浏览器仍然不能:

苹果浏览器

苹果浏览器

火狐安卓版

尽管如此,考虑到上述情况,我们现在可以放心地使用 SVG Favicon。

2) 将 SVG 呈现为数据 URL

这里的主要目标是避免 HTTP 请求。

正如本页上的其他解决方案所提到的,一个非常聪明的方法是使用数据 URL 而不是 HTTP URL。

SVG(尤其是小型 SVG)非常适合 Data URL,因为后者只是纯文本(任何可能有歧义的字符都以百分比编码),而前者是 XML,可以写成一长串纯文本(带有少量百分比代码)非常简单。

3) 整个 SVG 是一个单一的 Emoji

注意此步骤是可选的。您的 SVG 可以是单个表情符号,但也可以很容易地成为更复杂的 SVG。

2019 年 12 月,Leandro Linares 是最早意识到 Chrome 已加入 Firefox 以支持 SVG Favicon 的人之一,值得尝试看看是否可以从 emoji 中创建 favicon:

https://lean8086.com/articles/using-an-emoji-as-favicon-with-svg/

利纳雷斯的预感是对的。

几个月后(2020 年 3 月),Code Pirate Lea Verou 意识到了同样的事情:

https://twitter.com/leaverou/status/1241619866475474946

网站图标再也不会一样了。

4)自己实施解决方案:

这是一个简单的 SVG:

<svg
  xmlns="http://www.w3.org/2000/svg"
  viewBox="0 0 16 16">

  <text x="0" y="14">🦄</text>
</svg>

这是与数据 URL 相同的 SVG:

data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%3E🦄%3C/text%3E%3C/svg%3E

最后,这是作为 Favicon 的数据 URL:

<link rel="icon" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%3E🦄%3C/text%3E%3C/svg%3E" type="image/svg+xml" />

5)更多技巧(......这些不是你父母的网站!)

由于 Favicon 是 SVG,因此可以对其应用任意数量的滤镜效果(SVG 和 CSS)。

例如,除了上面的 White Unicorn Favicon,我们可以通过应用过滤器轻松制作 Black Unicorn Favicon:

style="filter: invert(100%);"

黑色独角兽图标:

<link rel="icon" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%20style='filter:%20invert(100%);'%3E🦄%3C/text%3E%3C/svg%3E" type="image/svg+xml" />

谢谢鲁宁!杰出的! SVG 也可以调整大小,因此再过 9 年,我们将可以选择我们希望网站图标在 Web 浏览器选项卡上的大小。选择:16x16 32x32 64x64 128x128 作为原创海报,看到 9 年后人们仍然关心让生活更美好、更愉快、更活泼或更优雅的小事,真是令人振奋! :)
你的问题完全有先见之明,@Sam。当你在 2011 年问这个问题时,Steve Souders 早就确定应该尽可能消除到服务器的往返。但多年后,网站图标挑衅地要求自己专门的往返。值得庆幸的是,由于浏览器制造商对基于 SVG 的网站图标的集体支持(迟来但非常受欢迎),情况已不再如此。 (我只是在努力中遇到了这个问题 - 仍在进行中,但我很快就会回来 - 创建一个 single-file Progressive Web App
<IMG src="data:image/svg..."> 已经工作了多年,我在 52 PlayingCards Custom Element 中使用它,我认为他们对 favicon 使用相同的解析代码。无需为 DataURI 转义所有内容,只需转义 # 并仅使用单引号。 xlink is deprecated,不是必需的。将数据 URI 降低到:data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><text x='0' y='14'>🦄</text></svg>(在 Chrome 中测试)
在将 viewBox 调整为 20x20 并将 x,y 位置调整为 -1,15.5 之后,我会说这是使用表情符号字符时的起点:href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><rect width='100%' height='100%' fill='hotpink'/><text x='-1' y='15.5' stroke='red'>😎</text></svg>"(在 Chrome 和 FireFox 上测试)Firefox 尊重表情符号图标颜色设计,Chrome 没有。
很好的贡献,@Danny'365CSI'Engelman,谢谢。我不知道 xlink:href 现在已弃用,但无论如何我已将它从它出现在上面的任何地方删除,因为它与网站图标 SVG 无关。另外,我看到您用空白文字替换 %20 的论点,但我不情愿......因为,由外行人复制粘贴和编辑,空白文字可以成为换行文字等。
P
Peter Mortensen

您可以使用 Base64 编码的网站图标,例如:

<link href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAACbUlEQVRIx7WUsU/qUBTGv96WSlWeEBZijJggxrREdwYixMnByYEyOvgfsBAMG0xuDsZ/QGc3NDFhgTioiYsmkhBYGLSBkLYR0va8gSjvQXiIT7/l5ibfOd/v3pN7gSmVSMTj8ThRfzdYk8lkMpl83/+AVFVVVXU0eHiVJEmSpB8DIcpkMplsdhCYz+fzhQJROBwOh8PDQN+oQCAQCASIRFEURZHI45GkP0/e7Xa73e70AMJnjel0Op1OA6oaDB4eAkAw6PcDvZ5t6zrw/Hx2trAw/cHYZ426ruu6DtzcGEYuBzQa19etFvD4WKtls4AoRqMPDwBjjLGPrt84ilgsFovF6EOapmmaRiP6O/jbAIguL4vFYpHGqlKpVCoVomq1Wq1Wibxer9fn+w+Q9+cUiUQikQhNrfdgWZZlWf4yyGhj27Zt254MUK/X6/X6F0aiKIqiKIOCYRmGYRjGZADLsizLIgqFQqHV1SkAnp5OTn79ItK0qyuPZ7SxaZqmaU4GKJfPzxmbfAPc/f3pqaIQLS8vLtZqgOP0bYyJoiAARC5Xrwf4/Vtbb2+Th1YqlUqlErC01GgkEkCz2WxyHLC+LsuiCAiCJLlcgM+3vd3pcBzXaJTLR0dEs7Ptdv+D4TiOG/A6DsBxQKvV621sAGtru7vl8ngAjuvXv7xcXIgiwNjMjCj2h+k4fQfPA4LA8xwHCO323V2hABiG223bwPy8xwMAbvfcHGMAY32j47y+3t4OAsZpZ2dzEwAsy7IcBxAExhwHMIxOx3GAlZVUyjT/1WFIudzenstFlEpFo9M8o+Pj/X2eJzo4SCR4fnzdb2N4Pyv9cduVAAAAAElFTkSuQmCC" rel="icon" type="image/x-icon" />

提示:此答案中使用的 base64 编码字符串是 PNG 文件,不适用于 IE10 或更早版本。
万一有人想知道它是linux penguin。
P
Peter Mortensen

我在 this page 上找到了一个有趣的解决方案。它是德语的,但您将能够理解代码。

您将图标的 base64 数据放入外部样式表中,因此它将被缓存。在您网站的头部,您必须使用 id 定义 favicon,并且在该 id 的样式表中将 favicon 设置为 background-image

link#icon {
    background-image:url("data:image/x-icon;base64,<base64_image_data>");
}

和html

<html>
    <head>
        <link id="icon" rel="shortcut icon" type="image/x-icon" />
        <link rel="stylesheet" type="text/css" href="/styles.css" />
        ...
    </head>
    <body>
        ...
    </body>
</html>

一位声望为 74.947 的人在此页面某处说:“你不能!” ……接着另一个声望不到50的人说道:“可以!”这是否意味着解决方案的驱动力和具体的创新驱动力与获得的声誉没有联系或关系? ......那真是太棒了!
我刚刚确认此解决方案不起作用 - 至少在 Windows 上的 Chrome 10 和 Firefox 3.6 中不起作用
我刚刚确认此解决方案确实有效 - 至少在 W7 64 位上的 Chrome 10.0.648 和 W7 64 位上的 FF 4.0 中
大声笑,我已经确认上述两个陈述似乎是矛盾的,尽管版本号略有不同,但我怀疑 Chrome 的行为发生了很大变化。 Firefox 可能从 3.6 升级到 4,但 Chrome 10 不太可能在一次小更新中改变这么多。
我可以确认这确实适用于 Ubuntu 20.04 上的 Chrome 83 和 Firefox ESR 68,并且我可以确认它无法防止对 /favicon.ico 的点击。所以你得到了图像,但你不会阻止额外的 SSL 连接。因为这是目标,所以这是失败的。
P
Pekka

好点子和好主意,但不可能。一个网站图标需要是一个单独的、独立的资源。没有办法将它与另一个图像文件结合起来。


也许我是盲人,但我看到 Google 搜索图标的唯一位置是在精灵中:google.com/search?q=foo
@yc google.com/favicon.ico 是浏览器自动查找的地方
@yc 你不是瞎子,你证明自己值得一个非常有创意的答案......正如 Pekka 已经指出的那样,/favicon.ico 是浏览器自动查看的地方。现在真正的坏消息来了:如果 favicon 不存在,则意味着错误 404 惩罚也会导致轻微延迟!!似乎无法逃离这个网站图标地牢。它们是如此之小,但哦,如此强大……该死的 :)
请参阅我的答案 stackoverflow.com/questions/5199902/…,了解加速正确方法的正确方法。
应该注意的是,这实际上应该是一次性的请求,几乎是永远的。与其他所有内容一样,服务器返回的长缓存计时器和正确的 301 将使网站图标请求成为一个有争议的问题(除非它不存在 - 哎呀!)。
P
Peter Mortensen

真的有关系吗?

许多浏览器将 favicon 加载为低优先级,这样它就不会阻止页面加载,所以是的,这是一个额外的请求,但它不在任何关键路径上。

公认的解决方案是可怕的,因为在检索并执行 JavaScript 代码之前,下面的所有 DOM 元素都将被阻止呈现,并且不会减少请求的数量!


请注意,在 2020 年a new solution has been accepted,将替换旧的已接受解决方案。大多数浏览器在 2019 年末引入了对 SVG favicon 的支持,使这种新方法成为可能。
P
Peter Mortensen

正确的解决方案是使用 HTTP pipelining

HTTP 流水线是一种将多个 HTTP 请求写入单个套接字而不等待相应响应的技术。流水线仅在 HTTP/1.1 中受支持,在 1.0 中不支持。

要求服务器支持,但不一定参与。

HTTP 流水线要求客户端和服务器都支持它。需要符合 HTTP/1.1 的服务器来支持流水线。这并不意味着服务器需要管道响应,但如果客户端选择管道请求,则要求它们不会失败。

许多浏览器客户端不这样做,但他们应该这样做。

大多数浏览器都禁用了 HTTP 管道。 Opera 默认启用流水线。它使用启发式方法来控制所使用的流水线级别,具体取决于连接的服务器。 Internet Explorer 8 不会对请求进行管道传输,因为担心代理有问题和线头阻塞。 Mozilla 浏览器(例如 Mozilla Firefox、SeaMonkey 和 Camino)支持流水线,但默认情况下它是禁用的。它使用一些启发式方法,尤其是关闭 IIS 服务器的流水线。 Konqueror 2.0 支持流水线,但默认禁用。[需要引用] Google Chrome 不支持流水线。

我建议您尝试在 Firefox 中启用流水线并在那里尝试,或者只使用 Opera(颤抖)。


流水线在传输层中完成的优化。它仍然涉及到 favicon 的单独 HTTP 往返,这就是问题所要问的。
@Már Örlygsson 这是不正确的。往返意味着客户端必须发出请求,然后等待处理请求和下载答案。流水线意味着在等待前一个请求完成的同时已经发送了请求,所以当相同的步骤发生时,它会导致的延迟不会相同......
Sam 无法在所有访问者的浏览器中打开流水线,所以从这个意义上说,这个解决方案不会让他的网站加载得更快——除了他个人。
@Már Örlygsson 和他的支持者:这不是在运输层完成的。在现实世界的模型中,这一切都在应用层完成。理论上流水线应该在会话层。
我不会和你争论这些语义。事实仍然是,Sam 不能“使用流水线”(虽然很整洁)来使他的网站为他的访问者加载得更快,因为流水线支持是 A)你自己指出的参差不齐,B)每个人都选择加入个人用户。
A
Anthony Hatzopoulos

这并不是问题的真正答案,而只是为了补充 Marcelyahelc 给出的答案。我为 404 favicon 问题提供了一个优雅的解决方案。

一些应用程序和浏览器会检查 favicon.ico 文件,如果在站点根目录中找不到该图标,您可以简单地使用 204 response 标头响应请求。

阿帕奇示例:

Apache 选项一(也是我最喜欢的),在你的 .htacces 或 .conf 中的一个简单的单行:

Redirect 204 /favicon.ico

阿帕奇选项二:

<Files "favicon.ico">
    ErrorDocument 204 ""
</Files>

为了进一步阅读,有一个很好的blog post by Stoyan Stefanov


是的,但是随着请求的提出并且网站图标经常以有意义的方式使用,我认为提供图标而不是空响应是值得的。无论如何,通过 gzip 压缩图标通常会使其达到单个 TCP 数据包大小
P
Peter Mortensen

这是一个好主意,但如果谷歌没有在他们的主页上做到这一点,我敢打赌它(目前)不能做到。


谷歌很棒,但这样的想法似乎适得其反,令人窒息。总是有新的、更好的和非常可能的做事方式,你不必为行业领导者工作而想出它们。
显然,谷歌从 SO 那里得到他们的想法,而不是反过来;)
很好的答案,如果谷歌可以让他们的页面更快,他们会的。
P
Peter Mortensen

抱歉,您不能将网站图标与其他资源结合使用。

这意味着您基本上有两种选择:

如果您对没有网站图标的网站感到满意 - 您可以只使用 href 指向已加载的非图标资源(例如,样式表、脚本文件,甚至是一些受益于 pre 的资源) -获取)。 (我的简短测试表明,这适用于大多数(如果不是全部)主流浏览器。)接受额外的 HTTP 请求并确保您的 favicon 文件具有激进的 HTTP 缓存控制标头设置。 (如果您有其他网站在您的控制之下,您甚至可以让他们偷偷地预加载该网站的图标 - 以及其他静态资源。)

PS 无效的创意解决方案:

奇怪的 CSS 数据 URI 技巧(由评论者 Felix Geenen 链接)不起作用。

使用 JavaScript 执行 favicon 元素的延迟注入(如用户 yc 所建议的那样)可能只会让事情变得更糟——导致两个 HTTP 请求。


其他不起作用的解决方案:.ico 中的多个图标,并在图像标签中使用 ico,希望它将在那里显示另一张图片,而不是作为 favicon。将 favicon 与另一个文件组合在一起。
P
Peter Mortensen

这是最简单的方法:

<!DOCTYPE html><html><head> 
<link rel="shortcut icon" href="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAA
lwSFlzAAALEwAACxMBAJqcGAAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4
OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3
JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdG
lvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25z
LmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj
4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAg
PC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAABLJJREFUWAnFV+trW2UY/yVN0j
S32q6bnWunQ1e11k3YXMUy8AbDoSBDv4mfFPTj/gD9ug/7B/woqCCISnGItcyppbgN
Rhn2st5G2yxt1svSJe1yPYnP703fcs7JSZo4YS9Ncs57eX6/5/Y+T12fX7hYdAHy92
iG+1GCU2X3/6V3k9sNl8uFUqnUkMiHJkDfuQV4M7WFbC4Hr8fTEAlPQ3RtmwleFI0z
mQxO95/EQP8pLEaj+PaHQbS3RmAUi7YTla8PRYDGLhgGPnz/HI719Srp0VgMhszRHf
WM/+wC+jy1tY2zb72uwOl7WmPi1gwCfr887609CdZtAfpZa0XNc/k8nug8gBPHjylF
uTY7N4/JmVmEQkFlBbWwx9eeBNyiKbVLZ7IKlEAtomEmm0Vvz1G0tLQoiKXoHXzz/Y
9qX75QgM/jhb/ZB5KtlRk1CdDM2+k0SKLn6SM4KBoXRHhsOY6J2XmsbWxgdv42Jqdn
cH3sJo4c7sKhg50oFku4s7yMuYUleJqahEizzDm7pCoBgt8XH7/Q8wzOvPmamLtz1w
UMvPjdu1hYjIrPp9He9hjOf/oJ9rW37e5hBiwuRXFpaBjR5RWEgkFHEq4vLlysuDkI
nhTwV068hPfeOau0oJ21KXUsKNvbvux7suKq734axNT0nLhOLCHuNI8KC1B4Wg7RnO
++fUaB03x0gxlYA1EYZcoxta73cJ3PD8SFuWxOnbdCl2k4EuCN9sbpATT7fMpsBLcP
DcR5gpuHBk8mU/jyq6+xcW8TYckMpziwSKagvKTX4x0deOpwt5JpBjKD1PM8eu064q
vraI2EHcEpw0pAqnK+YODA/n3wS6pxNEpAa58TK05IdoQl+AyjoGQ5fVkI0JbFoqEi
tlFgu/C01IeM3B2UY4s7y1YrAbXUeEm1SNx58Un8sDJKiNbsdiwEaD6m4JakoFPAOA
HZ57TleFs+2d2lMsotl1G1YSHATR5PEzYSCXXt8p2kGh36zED/y+o8qyNridOwEOBB
j5htI7GJ1bU1p/11zZX9XkJ31yF89MG5nTpScAxoCwFKZ86z8NxeWKwLrNom7YrjL/
bh/GcfY39Hu2RYJYkKAvR9KBjAjZv/CJHMThQ37gYS066IhMNgWmpSZtIVBHio2euV
AhLH+OSU2qsFmQ828jx69Rpi8VX4vJX9YgUBCmbBCIsVhv8cQTKVKt/jDsFIYvpjJ0
RLUuPYygqujF5FG3tEo7IkOxKgUObwvcR9DF2+omRTmE5NDco5/dFzSoGd4sWaMvjL
kCJZJQmsV7FZC9bziBSQv2+M4Y+RUbWki5IGZXPC1oy/eo4buY9W/PnX3zC/uFTuEa
VJcRoV1dC8iSRawyFcGv4dqe1tvHrqpFS1EFbX1zE+dQvT0hVlpNSyzvc+exR9zz8n
zUmbVL8ELv81grHxSbTK/lrtuWNDYibBZ14iSSEQlP6PGbIpZTadzkg/6Fdr1PaBvI
cCLYgIYa7TKsFAYNdtdpn6vaYF9CYCREQTxkBS/gPySZb42SvIvDhYNQRsQBlkal3i
R/cSWka137oI8LAOQF7VDDiDwHrw3Si/l9eFl5CtZzhmQa2DZlynfXut28/8C/JOMz
7+5SRKAAAAAElFTkSuQmCC">
</head></html> 

它代表什么图标?下面回答!


苹果图标?
P
Peter Mortensen

您可以使用 8 位 PNG 图像而不是 ICO 格式来获得更小的数据占用空间。您唯一需要更改的是使用“data:image/png”而不是“data:image/x-icon”MIME 类型标题:

<link
  href="data:image/png;base64,your-base64-encoded-string-goes-here"
  rel="icon" type="image/png"
/>

“type”属性可以是“image/png”或“image/x-icon”。两者都为我工作。

您可以使用 GIMP 或 convert 将 ICO 转换为 8 位 PNG:

convert favicon.ico -depth 8 -strip favicon.png

并使用 base64 命令将 PNG 二进制文件编码为 Base64 字符串:

base64 favicon.png