ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ontology Playground的分享链接编解码:shareCodec如何把本体塞进URL

Ontology Playground的分享链接编解码:shareCodec如何把本体塞进URL Ontology Playground的分享链接编解码shareCodec如何把本体塞进URL【免费下载链接】Ontology-PlaygroundFree, open-source web app for learning about ontologies and Microsoft Fabric IQ. Explore a catalogue of pre-built ontologies, design your own visually, export as RDF/XML, and share interactive diagrams. Zero backend, fully static.项目地址: https://gitcode.com/GitHub_Trending/on/Ontology-PlaygroundOntology Playground是一款免费的开源本体学习工具可视化设计本体Ontology后一键生成包含全部数据的分享链接——整份本体被压缩编解码后直接塞进 URL收件人打开链接即可还原完整模型全程零后端、纯静态运行。本文带你拆解它的核心编解码模块shareCodec是如何做到的。为什么把本体塞进 URL传统做法是把本体存到服务器再分享一个数据库 ID 链接。但 Ontology Playground 是完全静态网站没有任何后端见 README.md它选择了一条更激进的路把整个本体压缩后直接编码进 URL 片段hash里。这样做的好处链接即数据URL 本身就是完整备份不怕项目停运⚡零成本分享无需登录、无需数据库复制链接就能发给任何人无隐私顾虑数据不经过任何服务器shareCodec 的三步压缩流水线编解码逻辑集中在 src/lib/shareCodec.ts流程非常简单JSON 字符串 → deflate 压缩 → base64url 编码第一步序列化为 JSON本体实体、属性、关系加数据绑定bindings被打包成一个 JSON 对象由 encodeSharePayload 负责整个编码过程。第二步用浏览器原生 API 压缩这里没有引入任何第三方压缩库而是直接调用浏览器 2023 年起全面支持的CompressionStream(deflate)API。对本体这类结构化 JSONdeflate 的压缩率非常高长字段名和重复结构都能被大幅削减。第三步转成 URL 安全的 base64url压缩后的字节流会被转换成 base64url 字符集A-Z a-z 0-9 - _并去掉末尾填充符。之所以选 base64url而不是普通 base64是因为 URL 中不能出现、/、这些字符——它们在 URL 里各有特殊含义。uint8ToBase64url 完成了这次字符替换。解码端从 URL 还原本体解码是编码的镜像过程由 decodeSharePayload 实现base64url 还原字节 →DecompressionStream(deflate)解压 → 解析 JSON → 校验结构。解码前有两道关卡路由层白名单src/lib/router.ts 解析#/share/data路由时只放行 base64 安全字符且长度不超过 50000其他一律回首页结构校验解压出的 JSON 必须包含ontology.entityTypes和ontology.relationships两个数组缺失则抛出Invalid share payload错误。App.tsx 中的深度链接逻辑会在路由命中share页时自动触发解码成功后直接加载本体——对方打开链接看到的就是一模一样的图。32 KB 上限超长本体的优雅降级URL 不可能无限长shareCodec设定了 MAX_SHARE_URL_LENGTH约 32 KB上限。编码结果超长时返回undefined此时 Header.tsx 中的handleShare会自动降级——不再生成链接而是把本体导出为 RDF/XML 文件下载并提示Downloaded RDF。此外还有一种更短的分享方式如果当前打开的是官方目录里的本体Share 按钮直接生成#/catalogue/id这种短链接根本不经过压缩编解码链接短小好记。安全设计把恶意载荷只当数据shareCodec 的测试文件 中有整整一节安全测试值得新手学习️XSS 载荷实体名里塞scriptalert(xss)/script解码后原样保留为纯字符串不会被执行️原型污染__proto__、constructor等注入尝试均被JSON.parse的天然行为挡住Object.prototype不受污染️SQL 注入风格字符串; DROP TABLE ontologies; --只作为数据存在️深层嵌套炸弹100 层嵌套 JSON 字符串不会导致解析崩溃。这套防御思路的核心是数据永远只是数据解码后绝不把任何字段当作代码或 HTML 执行。上手体验分享链接打开应用进入 Designer 画几个实体和关系点击顶部工具栏的Share按钮观察按钮状态从Encoding…变为Copied!查看浏览器地址栏——#/share/后面那串密文就是你的本体换台设备打开该链接本体会被原样还原。小结环节实现位置要点压缩编码shareCodec.ts原生 CompressionStream零依赖路由白名单router.ts字符集校验 50000 长度上限解码加载App.tsx失败静默回首页超长降级Header.tsx自动改导出 RDF 文件安全测试shareCodec.test.tsXSS / 原型污染 / 注入全覆盖shareCodec用不到 130 行代码展示了纯前端应用链接即状态的优雅解法JSON 原生压缩 base64url三步就把一整份本体塞进了 URL。【免费下载链接】Ontology-PlaygroundFree, open-source web app for learning about ontologies and Microsoft Fabric IQ. Explore a catalogue of pre-built ontologies, design your own visually, export as RDF/XML, and share interactive diagrams. Zero backend, fully static.项目地址: https://gitcode.com/GitHub_Trending/on/Ontology-Playground创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表