每个URL如何确定性映射到本地路径kage资源本地化与链接重写机制源码级解析【免费下载链接】kageShadow any website for offline viewing, with the JavaScript stripped out项目地址: https://gitcode.com/gh_mirrors/kage6/kagekage 是一个网站离线镜像工具它用无头 Chrome 渲染页面把 CSS、图片、字体下载为本地文件并将所有链接重写为本地相对路径。本文从源码层面拆解 kage 的 URL 本地路径映射规则——为什么https://ex.com/docs/永远落成docs/index.htmlhttps://cdn.io/font/x.woff2永远落在_kage/cdn.io/font/x.woff2从而让镜像页面断网双击即可打开。先看落盘效果映射的具体形态kage clone paulgraham.com之后磁盘上的目录长这样paulgraham.com/ ├── index.html # 首页脚本已剥离 ├── greatwork.html # /greatwork.html 文章页 └── _kage/ # 保留目录资源与爬取状态 ├── paulgraham.com/site.css # 本地化的样式表内部 url() 已重写 ├── paulgraham.com/pg.png └── state.json # 已访问集合用于断点续传两条核心规律页面镜像 URL 的路径/docs/intro变成docs/intro/index.html资源统一收进保留目录_kage/host/...与站点自身的路径树永不冲突。保留目录名_kage在 urlx/urlx.go 中定义为DefaultReserved刻意选了一个真实 URL 几乎不会出现的段名。第一步 Normalize把不同写法的 URL 收拢成同一个规范形映射之前先去重。同一条资源可能以HTTPS://Other.COM/Y、https://other.com:443/Y等多种写法出现canonical 会统一协议与 host 转小写丢弃 fragment#frag和默认端口80/443path.Clean清理路径但保留有意义的结尾斜杠/docs/≠/docs查询串做安全转义真实站点会发出a.css?Thursday, 26-Feb-2026 16:26:41 UTC这种带空格的缓存破坏参数safeRawQuery 按 RFC 3986 只编码不合法字符空格变%20而%转义和、等合法子分隔符原样保留——修好请求行的同时盘上的文件键也随之稳定。Normalize 同时拒绝javascript:、mailto:、data:、blob:、纯#锚点等无法抓取/下载的引用原样留在页面上。LocalPath 规则页面镜像 URL 路径资源收进 _kage映射本体是 LocalPath按类型分两条规则页面Pagehttps://ex.com/ → index.html https://ex.com/docs/ → docs/index.html https://ex.com/docs/intro → docs/intro/index.html https://sub.ex.com/x → sub.ex.com/x/index.html两个细节让同一页面只落一份文件成立collapseIndex 把目录索引文档折叠成目录本身/、/index.html、http://与https://写法全部落到同一个index.html子域名页面如开启--subdomains后会多一段 hostsub.ex.com/x落sub.ex.com/x/index.html永远不会与主域的路径树撞车。资源Assethttps://ex.com/css/main.css → _kage/ex.com/css/main.css https://cdn.io/font/x.woff2 → _kage/cdn.io/font/x.woff2 https://ex.com/assets/ → _kage/ex.com/assets/indexsplitAsset 为目录式资源路径以/结尾或空路径补一个index文件名保证落盘永远有扩展名可读。查询串折叠成哈希?qcats这类参数通过 applyQuery 取 SHA-256 前 6 位插到扩展名前https://ex.com/img/logo.png?v3 → _kage/ex.com/img/logo__q-a1b2c3.png https://ex.com/search?qcats → search/index__q-a1b2c3.html同一查询永远得到同一文件稳定哈希不同查询得到不同文件不碰撞——这正是 urlx_test.go 里反复验证的两条断言。Rel 相对重写从页面目录算到目标文件映射出两个绝对相对镜像根路径后Rel 计算从页面所在目录到目标文件的相对链接写回 HTML/CSS页面 docs/intro/index.html → _kage/ex.com/css/main.css 相对链接为 ../../_kage/ex.com/css/main.css → 根 index.html 相对链接为 ../../index.html测试中有一条值得注意的不变式TestRelResolves把页面目录与 Rel 的结果拼起来再清理必然精确落在目标文件上。这条往返可达性质保证了离线时浏览器解析相对链接一定命中正确文件。Sink 回调为什么链接可以先于下载完成被重写这是整个设计里最巧妙的一环。页面渲染完、资源还没下载HTML 里的链接就能先改好——因为双方都对字节最终住在哪里有共识。RefSink 是一个回调函数(URL, 类型) → 写回标记的字符串。cloner.go 中闭包实现它的决策逻辑情况行为写回的内容范围内的页面链接入队待渲染本地相对路径应本地化的资源wantAsset 通过入队待下载本地相对路径站外页面 / 站外资源 / 大体积媒体不动保留原始绝对 URLwantAsset只凭 URL 就能做决策两道闸门注册域检查SameRegistrableDomain 用 eTLD1 判断资源是否站点自己的——developer.apple.com、www.apple.com、images.apple.com都算apple.com的而cdn-apple.com或第三方统计脚本不算默认留在线上扩展名黑名单视频、安装器、压缩包、PDFDefaultSkipAssetExts不下载避免 500 MB 的安装包把镜像撑爆。HTML 侧重写RewriteHTML 遍历 DOM覆盖a/area的 href、img的 src 与 srcset保留宽度/密度描述符、link relstylesheet|icon|preload…、video/audio的 src 与 poster、style内容以及任何元素的行内style。a href还会先经 LikelyPage 判断后缀是.pdf/.png等已知二进制扩展名的当资源下载而非页面渲染。CSS 侧重写RewriteCSS 用正则捕获所有url(...)与import ...含单双引号和无引号形式逐个以样式表自身 URL 为基准解析后交给同一个 sinkdata:内联图跳过。确定性的红利去重、断点续传与单文件打包映射一旦是纯函数下游三件事全部免费获得去重页面和资源都用LocalPath的输出做唯一键pageKey / assetKey。同一条文章经 http 和 https 到达、带不带尾斜杠只抓取一次内容完全相同的页面还会被 writePage 硬链接到首个文件磁盘不重复占字节。断点续传已访问集合写入_kage/state.jsonCtrl-C 退出再运行即从断点继续因为做过什么完全由这些确定性路径刻画。打包零重写kage pack把整个镜像塞进 ZIM 单文件时页面里已是镜像相对路径与归档内容条目一一对应——pack/serve.go 的注释点明点击即命中正确条目回读时不再需要任何重写。阅读源码的快速入口想搞懂看哪里URL 规范形与去重键urlx/urlx.go映射主规则LocalPath、collapseIndex查询串哈希文件名applyQuery相对链接计算Rel 与往返测试HTML/CSS 引用重写asset/html.go、asset/css.go本地化决策与入队cloner.go 的 sink、wantAsset映射的全部期望值urlx_test.go一句话总结先把 URL 规范化成唯一字符串再用纯函数把它映射成磁盘路径链接重写与下载解耦——这就是 kage 的镜像既离线可用、又可去重续传、还能压进一个 ZIM 文件的全部秘密。【免费下载链接】kageShadow any website for offline viewing, with the JavaScript stripped out项目地址: https://gitcode.com/gh_mirrors/kage6/kage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
宁波seo外包推广多少钱?3类方案拆解避坑指南 宁波seo外包推广多少钱?3类方案拆解避坑指南 在宁波做企业官网,最怕的就是预算被不明不白的费用吞掉。很多老板问我,宁波seo外包推广到底多少钱,心里没底就不敢下单。这很正常,行业水太深,报价单上写的数字往往只是冰山一角,后续加钱的名目多到… · 2026/9/26 23:25:48
AHK专用中文编辑器整合版:解决乱码、调试与打包全流程 简介:面向AutoHotkey中文用户的多合一编辑环境,整合SciTE 2.1.0 cn及多种脚本辅助工具,解决AHK脚本编写、调试与日常管理中的痛点。无论是快捷键映射、热字符串,还是窗口管理任务,都能在统一界面中完成,适合… · 2026/9/26 23:25:42
Lap快速上手:从下载到浏览第一本照片库只需5步 Lap快速上手:从下载到浏览第一本照片库只需5步 【免费下载链接】lap An offline-first photo manager for large local libraries 项目地址: https://gitcode.com/GitHub_Trending/lap3/lap
Lap 是一款开源免费的本地照片管理器(Local-first Phot… · 2026/9/26 23:25:42
拒绝丑模板!在门户网站管理建设工作讲话图解步骤全解 拒绝丑模板!在门户网站管理建设工作讲话图解步骤全解 别再对着那个一眼假的 Bootstrap 模板抓头了,真的,模板网站太丑不够用是大多数创业团队负责人的噩梦。你花大价钱买的“企业级解决方案”,上线后客户第一反应往往是:“这网站是十年前的吧… · 2026/9/27 0:12:39
企业网站seo排名优化哪家好?5步实操避坑指南 企业网站seo排名优化哪家好?5步实操避坑指南 模板网站太丑且功能僵化,根本撑不起业务需求,这时候大家最纠结的就是企业网站seo排名优化哪家好,怕被割韭菜。… · 2026/9/27 0:12:26
做网站公司晨旭东方避坑指南:网站被黑挂马后的7天自救实战 做网站公司晨旭东方避坑指南:网站被黑挂马后的7天自救实战 凌晨三点,手机突然疯狂震动。你迷迷糊糊醒来,点开工作群,满屏都是红色感叹号和愤怒的语音条。“网站怎么变成赌博广告了?”“客户投诉说点击链接跳转到非法页面!”“咱们是不是被黑客入侵了?… · 2026/9/27 0:12:02
为wordpress首页添加关键词的速查手册:告别拖期 为wordpress首页添加关键词的速查手册:告别拖期 改个需求建站公司拖一周,这种痛谁懂?很多设计师转前端的朋友,接手一个WordPress项目,客户指着首页说“这里要加个关键词,方便百度搜”,结果开发团队排期排到下个月。别等了,今天就把… · 2026/9/27 0:11:36
Ajax实现WordPress导航栏实战案例与安全加固 Ajax实现WordPress导航栏实战案例与安全加固 做网站最怕什么?不是代码写不出来,是上线后一堆破事儿缠身。特别是备案流程一头雾水,域名刚注册完,ICP备案材料准备到一半,发现服务器IP和域名解析对不上,或者SSL证书没配好导致浏览器… · 2026/9/27 0:11:24
如何在3分钟内给React项目嵌入Web终端:wterm快速上手教程 如何在3分钟内给React项目嵌入Web终端:wterm快速上手教程 【免费下载链接】wterm A terminal emulator for the web 项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm
wterm 是一款面向浏览器的 Web 终端模拟器(terminal emulator for the… · 2026/9/27 0:11:24
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01