一、Gemini 是什么
Gemini 是一种新兴的互联网应用层协议,诞生于 2019 年,由 Solderpunk 发起设计。它的定位非常明确:
介于 Gopher 和 HTTP 之间,比 Gopher 更现代,比 HTTP 更简单。
如果你厌倦了现代 Web 的臃肿——动辄几 MB 的 JavaScript、无穷无尽的 Cookie 弹窗、追踪脚本和广告框架——Gemini 提供了一条回归信息本质的逃生通道。
二、为什么需要 Gemini
2.1 Gopher 太古老
Gopher(1991)的设计理念很棒(极简、层级、纯文本),但它有硬伤:
- 无加密:明文传输,在现代互联网不可接受
- 无错误码:成功失败靠约定,调试困难
- 无类型系统:资源类型靠单个字符标识,扩展性差
- 无输入机制:除了搜索框,几乎无法与用户交互
2.2 HTTP 太复杂
HTTP/1.1 → HTTP/2 → HTTP/3,每一次迭代都在增加复杂度:
| 特性 | HTTP 现状 |
|---|---|
| Header | 数十个标准头,无限自定义头 |
| 方法 | GET/POST/PUT/PATCH/DELETE/OPTIONS… |
| 状态码 | 40+ 个,还要细分 |
| 扩展 | Cookie、CORS、HSTS、CSP、SRI… |
| 渲染引擎 | HTML + CSS + JS,永恒的安全噩梦 |
Gemini 的设计哲学是有意识地做减法:
“不是 HTTP 做不了的我们不加,而是 Gopher 没做好的我们才补。”
三、Gemini 的核心设计
3.1 协议栈极简
1+------------+
2| Gemini | ← 应用层协议(类似 HTTP)
3+------------+
4| TLS 1.2+ | ← 强制加密(类似 HTTPS)
5+------------+
6| TCP | ← 传输层
7+------------+
Gemini 强制 TLS,没有明文传输的选项。这避免了 HTTP 历史上 “HTTP 默认、HTTPS 可选” 的安全债。
3.2 请求格式
一个 Gemini 请求就是一个 URI + CRLF:
1gemini://example.com/document.gmi\r\n
没有 Header。没有方法。没有 Cookie。
对比 HTTP:
1GET /document HTTP/1.1
2Host: example.com
3User-Agent: Mozilla/5.0
4Accept: text/html
5Accept-Language: zh-CN
6Accept-Encoding: gzip
7Connection: keep-alive
8Cookie: session=abc123
Gemini 的请求永远只有一行。
3.3 响应格式
1<STATUS> <META>\r\n<BODY>
- STATUS:两位数字状态码(比 HTTP 少得多)
- META:人类可读的状态说明或 MIME 类型
- BODY:二进制内容,直接跟随
例子:
120 text/gemini\r\n# Hello, Gemini!\r\nThis is a simple document.
3.4 状态码极简
| 状态码 | 含义 | 对比 HTTP |
|---|---|---|
20 | 成功 | 200 |
30 | 重定向 | 301/302 |
40 | 临时失败 | 404/500 |
50 | 永久失败 | 410 |
60 | 需要客户端证书 | 无直接对应 |
没有 201、204、206、301、302、304、400、401、403、404、405、500、502、503… 的细分。Gemini 认为:客户端不需要知道这么多细节。
3.5 输入机制:原生支持
Gopher 几乎没有输入能力。Gemini 引入了 INPUT 状态码 (10):
110 What is your name?\r\n
客户端收到 10 后,弹出一个输入框,用户提交后客户端再发送一次请求:
1gemini://example.com/search?name=Alice\r\n
没有 POST body,没有表单编码。输入通过 Query String 传递,极简但够用。
四、Gemini 文本格式(text/gemini)
Gemini 不传输 HTML。它有自己的标记语言,比 Markdown 更严格,比 HTML 更简单。
4.1 语法一览
1# 一级标题
2## 二级标题
3### 三级标题
4
5普通文本段落,自动换行。
6
7* 列表项 1
8* 列表项 2
9* 列表项 3
10
11> 引用文本
12
13```代码块
14自动识别,无需指定语言
=> https://example.com 链接文本 => gemini://other.capsule 另一个 Gemini 胶囊
1
2**注意**:
3- 没有内联样式(粗体、斜体、下划线)
4- 没有图片内嵌(图片作为独立链接)
5- 没有表格
6- 没有超链接文本混排(链接独占一行)
7
8### 4.2 设计理念
9
10> "内容创作者应该专注于**写什么**,而不是**怎么渲染**。**"
11
12Gemini 客户端决定如何渲染 `text/gemini`,作者无法干预。这彻底消除了:
13- CSS 漏洞和注入
14- 视觉欺骗钓鱼("这个按钮看起来安全")
15- 跟踪像素和字体指纹
16
17---
18
19## 五、Gemini vs Gopher vs HTTP
20
21| 特性 | Gopher | Gemini | HTTP |
22|------|--------|--------|------|
23| 诞生时间 | 1991 | 2019 | 1991 |
24| 传输加密 | ❌ 无 | ✅ 强制 TLS | ⚠️ 可选 (HTTP/3 强制) |
25| 请求复杂度 | 极简 | 极简 | 复杂 |
26| 响应头 | 无 | 极简一行 | 复杂多行 |
27| 内容格式 | 文本/二进制 | text/gemini + 任意 | HTML/CSS/JS/任意 |
28| 交互能力 | 搜索框 | 输入框 (10) | 表单/JS/AJAX/WebSocket |
29| 状态码 | 无 | 5 个 | 40+ 个 |
30| 扩展性 | 差 | 故意限制 | 极强 |
31| 客户端实现 | 容易 | 非常容易 | 极其困难 |
32| 现代生态 | 复古社区 | 活跃增长 | 统治互联网 |
33
34---
35
36## 六、现代生态与工具
37
38### 6.1 服务端
39
40| 项目 | 语言 | 特点 |
41|------|------|------|
42| **Agate** | Rust | 轻量、安全、高性能 |
43| **Gmnisrv** | C | 简洁,依赖少 |
44| **Jetforce** | Python | 功能丰富,易扩展 |
45| **Molly Brown** | Go | 成熟稳定 |
46
47### 6.2 客户端
48
49| 项目 | 平台 | 特点 |
50|------|------|------|
51| **Lagrange** | 跨平台 GUI | 功能最完善的图形客户端 |
52| **Amfora** | 终端 | 优美的 TUI 体验 |
53| **Browsh** | 终端 | 支持 Gemini 的文本浏览器 |
54| **Kristall** | 跨平台 | 支持 Gopher/Gemini/Finger |
55
56### 6.3 搜索引擎与聚合
57
58- **Gemini Search (gus.guru)**:Gemini 空间的搜索引擎
59- **Antenna**:Gemini 博客聚合器
60- **CAPCOM**:内容聚合与推荐
61
62---
63
64## 七、Gemini 的局限性与批评
65
66### 7.1 功能过于受限
67
68- 无法上传文件(无 POST body)
69- 无法构建复杂应用(无脚本、无状态管理)
70- 内联链接缺失影响某些文档类型(学术论文、百科)
71
72### 7.2 生态隔离
73
74Gemini 空间(称为 "Smol Web" 或 "Capsule")与主流互联网几乎不互通。你不可能在 Gemini 上阅读一篇包含交互式图表的数据新闻。
75
76### 7.3 客户端证书的设计争议
77
78状态码 `60` 要求客户端 TLS 证书用于身份认证,但证书管理对普通用户来说门槛过高,实际使用率低。
79
80---
81
82## 八、适用场景总结
83
84| 场景 | 是否适合 Gemini | 原因 |
85|------|----------------|------|
86| 个人博客/日记 | ✅ 完美 | 纯文本,无广告,隐私优先 |
87| 技术文档/手册 | ✅ 适合 | 结构化内容,无需交互 |
88| 新闻/资讯站点 | ⚠️ 可以 | 缺乏图片内嵌和富媒体 |
89| 电商/支付 | ❌ 不适合 | 无状态管理、无安全输入机制 |
90| 社交网络 | ❌ 不适合 | 无实时推送、无评论系统 |
91| 内部知识库 | ✅ 适合 | 低维护成本、无安全风险 |
92| 嵌入式/IoT | ✅ 适合 | 协议极简、TLS 内置 |
93
94---
95
96## 九、总结
97
98Gemini 不是来取代 HTTP 的。它是一个**有意的替代方案**,为那些:
99
100- 厌恶 Web 复杂化的开发者
101- 关心隐私和去跟踪的普通用户
102- 资源受限环境下的系统设计者
103
104提供了一条退路。
105
106如果你也对极简协议感兴趣,可以从安装 **Lagrange** 或 **Amfora** 开始,访问 `gemini.circumlunar.space`(Gemini 项目主页),体验一下这个"轻 100 倍的 Web"。
107
108---
109
110## 参考
111
112- [Gemini Project Homepage](gemini.circumlunar.space)
113- [Gemini Specification](https://gemini.circumlunar.space/docs/specification.html)
114- [Lagrange Browser](https://gmi.skyjake.fi/lagrange/)
115- [GUS - Gemini Search](https://gus.guru)