本页面由机器翻译,仅供参考。如有出入,请以英文原文为准。

256t.org

256t.org 标志      256t.org 二维码

256t.org 内容寻址存储概念图

是什么?

256t.org 是一个专门用于发布某种特定类型内容寻址存储公开规范的域名。 在这一方案中,URL 路径中最后一个最多 94 个字符的元素决定了该 URL 处的内容。 将来,它也许还会发展成为一个使用该方案发布内容的公共设施。 不过,这目前超出了本站的范围。

为什么?

为什么要有 256t.org? 在我看来,一个用于通用内容寻址存储的简单标准总体上是有用的。

怎么做?

每一个 94 字符的路径都可以用来获取与其指定的长度和哈希相匹配的内容。 如果没有可用的内容,则返回 404。

SHA-512 哈希的长度为 512 位,即 64 字节。 64 字节可以存放在一个 86 字符的 base64 字符串中。

(64 * 8) / 6 = 85.333... ~= 86

64 字节或更短的内容可以直接存放在相同或更小的空间里。 在这种情况下,应当对内容本身进行 base64 编码并尽量少用填充,而不是使用它的哈希。

一个 8 字符的 base64 字符串可以存储 48 位。

2^48 = 2^40 * 2^8
  = 2^10 * 2^10 * 2^10 * 2^10 * 2^8
  = 2^8  * 2^10 * 2^10 * 2^10 * 2^10
  = 256    K      M      G      T

以下说法虽然并不严格成立,但可以视为足够正确: - 一个 94 字符的路径唯一确定内容。(不过,对于小于 64 字节的内容,这完全成立。) - 内容是不可变的。(它可能被仍然符合描述的另一份内容所替换。) - 内容可以安全地无限期缓存。

因此,所有 HTTP 元信息(例如响应头和 ETag)都会表明该内容可以无限期缓存。

94 字符的内容标签由 8 字符的长度前缀和其后 86 字符的哈希组成。

内容的长度 内容的哈希 内容本身
何时 始终 length(content) > 64 length(content) <= 64
起始 1 9 9
结束 8 94 94
长度 8 86 0 到 86
格式 Base64 Base64 Base64
信息 length(content) sha-512(content) content

Base64

更具体地说,是文件名和 URL 安全的 Base64,又称 base64url。

CID

这种用于标识内容、不超过 94 个字符的 base64 字符串,被称为内容标识符(content identifier),简称 CID。

何时

何处

任何服务器都可以公开一个基础 URL,其内容遵循本规范。 可惜的是,哪些服务器托管哪些内容、以及如何找到它们,超出了本文的范围。 本服务器在这里托管了一小部分 CID。

超出本文范围的内容

这些事情都超出了本文的范围。

工具

示例文件

examples/ 目录包含用于测试 CID 生成和验证的示例文件。其中包括一些 256t 品牌资源,以多种媒体类型演示本规范:

文件 说明
256t.mp4 讲解 256t.org 内容寻址存储规范的视频(也可在 YouTube 上观看)(英文)
256t.png 256t.org 概念示意图
256t_Content_Addressable_Storage_Specification.pdf 完整规范的 PDF 文档(英文)
256t_and_the_End_of_Broken_Links.m4a 关于 256t.org 如何解决链接失效问题的音频讨论(英文)
256t_logo.jpg 256t.org 标志(JPEG 格式)
256t_logo.png 256t.org 标志(PNG 格式)
256t_qr_code.png 指向 256t.org 的二维码

这些文件可以配合 CID 示例工具或文件 CID 检查工具使用,以验证它们的内容标识符。

URI 协议

一份提议 t256: URI 协议的 RFC 草案可在 rfc/draft-cox-t256-uri-scheme-00.md 查看。t256: URL 只包含一个 CID,没有主机或路径。(256t: 这种写法不是有效的 URI 协议名,因为 RFC 3986 要求协议名以字母开头。)

发布

关于部署和发布使用 CID 的内容寻址存储的信息,请参阅发布与存储。

常见问题

对 256t.org 有疑问?请查看常见问题页面,那里解答了关于 CID、实现、安全性等方面的常见问题。

碰撞怎么办?

有几种不同类型的碰撞需要加以区分: - 意外碰撞 —— 纯属偶然 - 对抗性碰撞 —— 有人蓄意制造 - 既有碰撞 —— 已经有不同的内容产生了同一个 CID - 问题碰撞 —— 使用 CID 获取内容时返回了错误的内容

发生问题碰撞的几率相当低。有两种方法可以将其降到最低: - 始终验证 CID 内容。已有许多实现可以做到这一点。直接撒谎要比设计出一次碰撞容易得多。 - 减少对手。如果没有人把有问题的内容放到你可能接受的地方,剩下的就只有意外了。

对于意外造成的问题碰撞,我可以坦然忽略。

实现

256t.org 规范已经用多种编程语言实现。每个实现都提供生成和验证内容标识符(CID)的工具。

语言 徽章 代码
Bash Bash bash
C C c
C++ C++ cpp
C# C# csharp
Clojure Clojure clojure
ClojureScript ClojureScript clojurescript
CMake CMake cmake
Crystal Crystal crystal
D D d
Dart Dart dart
Deno Deno deno
ECMAScript ECMAScript ecmascript
Elixir Elixir elixir
Elm Elm elm
Emacs Lisp Emacs Lisp emacs-lisp
Erlang Erlang erlang
F# F# fsharp
Fortran Fortran fortran
Go Go go
Groovy Groovy groovy
Haskell Haskell haskell
Java Java java
JavaScript JavaScript javascript
Julia Julia julia
Kotlin Kotlin kotlin
Lua Lua lua
Nim Nim nim
Node.js Node.js node
OCaml OCaml ocaml
Perl Perl perl
PHP PHP php
PowerShell PowerShell powershell
Prolog Prolog prolog
Python Python python
R R r
Racket Racket racket
Ruby Ruby ruby
Rust Rust rust
Scala Scala scala
Swift Swift swift
Tcl Tcl tcl
TypeScript TypeScript typescript
Unison Unison unison
Zig Zig zig