Gemini 协议:Gopher 的精神继承者与极简 Web 的另一种可能

Jun 9, 2026 分钟阅读

一、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)