MHT 文件到底是什么
当年 Internet Explorer、Word 或 Chrome 的"另存为 MHTML"把网页写成单个文件时,产出的其实是一封符合 RFC 2557 的邮件报文。一个 multipart/related 正文里装着 HTML,外加页面引用过的每一张图片、每份样式表和每个脚本,每一部分都标注了它的来源 URL。这个格式本身相当合理,只是如今几乎没有软件还能打开它。
页面是怎样还原的
先把各部分拆开,按各自的传输编码解码(文本通常是 quoted-printable,图片是 base64),然后重写根 HTML 中的引用。最后这一步才是全部工作所在:每个 src、href 和 CSS 的 url() 仍然指向原始的绝对地址,不重写页面就会光秃秃地显示出来。每个引用都会与为它保存的那一部分对应起来——通过 Content-Location,或者对 cid: 引用通过 Content-ID——然后改为指向那一部分的字节。
不联网,不执行脚本
还原后的页面放进一个 iframe,其 sandbox 只有 allow-same-origin,没有别的。没有 allow-scripts,所以存档里的脚本一个都跑不起来。
此外还会向页面注入 default-src 'none' 的内容安全策略。这一点比听上去更重要:任何存档没有保存的引用,在重写之后仍然是绝对的 http 地址,浏览器渲染时会悄悄去请求它。这条策略阻止了这种行为,只有 blob: 和 data: 这两种指向文件内部内容的地址才被允许加载。
不完整的存档
网页存档经常保存得并不完整:样式表里声明却未被抓取的背景图、延迟加载的图片、放在别的域名上的字体。这些引用会被统计并列出。如果页面看起来不对劲,这份清单通常就能解释原因,比一个破损图片图标要有用得多。
还会显示
主题、页面保存的日期,以及原始 URL——即根部分的 Content-Location,也就是这个页面真正的来源。此外还有每一部分的 MIME 类型、传输编码、声明的字符集和解码后大小,并可切换查看根 HTML 的源码。
隐私
存档在你的浏览器中打开,不会上传,它和本工具都不会访问网络。
Tiny Online Tools







