Hacker News 中文摘要

RSS订阅

我将一个网站存储在Favicon中 -- I Stored a Website in a Favicon

文章摘要

作者受之前隐藏数据的经历启发,尝试将网站内容存储在浏览器标签页的favicon图标中。通过将文本的UTF-8字节直接写入图标的RGB像素通道,实现了在favicon中存储HTML网页数据。

文章总结

将网站内容存储在Favicon中

作者曾尝试将数据隐藏在鼠标DPI寄存器中,虽然不实用,但激发了他将一切视为潜在存储介质的想法。这次,他选择将网站内容存储在Favicon(浏览器标签页图标)中。

核心思路:Favicon本质上是图片,图片由像素组成,像素由字节构成。作者利用隐写术,将HTML文本的UTF-8字节直接写入像素的RGB通道中。浏览器将像素视为颜色,而作者将其视为数据。

实现过程: 1. 将HTML内容(如“

Website in a Favicon

”)通过TextEncoder转换为字节数组。 2. 在字节数组前添加4字节的长度头,用于标记有效载荷的结束位置。 3. 将字节依次填充到像素的RGB通道中(第一个字节→红色,第二个→绿色,第三个→蓝色),生成一张看似随机噪点的图片。

结果:一个208字节的HTML页面(含样式)加上4字节头,仅需71个像素,最终生成9x9像素的图片(容量239字节,使用率87%),比普通Favicon还小。

读取过程: 1. 浏览器加载Favicon图片。 2. 将图片绘制到Canvas上。 3. 通过Canvas API读取每个像素的RGB值,反向还原字节数组。 4. 根据长度头提取有效载荷,解码为HTML文本,最终替换页面内容。

关键限制:Favicon本身不包含完整网站,仅存储内容。需要JavaScript引导程序来解码图片。用户需点击“Render Website”按钮触发解码。

实用性:毫无实用价值——存储量极小,依赖JavaScript引导,且有更优的HTML分发方式。但作者认为,这挑战了Favicon的固有认知:它本应是图标,但本质上只是PNG文件,而PNG就是字节。

替代方案:直接使用SVG Favicon存储标记;利用PNG注释块(如tEXt、zTXt、iTXt);或利用ICO文件格式支持多分辨率图标的特点。

相关链接: - 演示网站:https://www.timwehrle.de/labs/favicon-site/ - 源码:https://github.com/timwehrle/favicon

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 技术创意与趣味性(多数评论持正面态度)

    • 评论1:"Pretty cool tbh!!! Would have loved seeing the decoder code!!!"
    • 评论10:"Fascinating concept! Thanks for sharing this!"
  2. 替代方案与改进建议(部分评论提出不同思路)

    • 评论4建议使用SVG favicon直接存储标记:"Instead of going via pixels, why not use a SVG favicon and directly store markup inside it and extract it?"
    • 评论6指出PNG有注释块可存储内容:"PNG has comment chunks tEXt, zTXt, and iTXt. You can have a completely normal image whose file is stuffed with as much content as you want."
    • 评论7建议使用Service Worker:"I would have used a minimal service worker to unpack the web data and present it as if it were just a normal page being loaded."
  3. 安全与隐私风险(评论3提出)

    • "You can use the favicon cache as storage too... it could be used to track users across browser profiles."
  4. 质疑与批评(少数评论)

    • 评论9质疑其创新性:"Surprised that a minimal 'website' only requires a small image = few pixels = few bytes to store it? Um, ok."
    • 评论11批评内容风格:"I found the agressively staccato, clearly LLM-generated content extremely difficult to read."
  5. 扩展应用与历史参考(部分评论)

    • 评论5提出结合WebAssembly制作游戏:"I wonder is it possible to make a simple game with also leveraging the webassembly?"
    • 评论15提出利用favicon缓存进行流式传输:"you could generate the favicon dynamically, then have JS extract the sequentially... streaming arbitraily large content to a webpage via favicons."
    • 评论13和16引用历史项目(如URL存储页面、CSS无HTML渲染)

平衡性总结: - 多数评论认可该技术的创意和趣味性,但指出存在更简单或更高效的替代方案(如SVG、PNG注释、Service Worker)。 - 部分评论关注安全风险(缓存追踪)和内容质量(LLM生成风格)。 - 少数评论质疑其实际价值或创新性,认为类似概念已有先例。