Gopher二次编码原因解析
这是一个非常经典且重要的问题。Gopher 协议本身并不需要二次编码,但在现代 Web 环境下,为了安全地传输数据,我们不得不对 Gopher 链接进行 URL 编码,这导致了“二次编码”的现象。
下面我们来详细拆解这个问题。
1. 第一次编码:Gopher 协议本身的“伪编码”
Gopher 协议设计于 1991 年,非常简单。一个 Gopher 请求的格式是这样的:
text
<selector><tab><host><tab><port><cr><lf>
-
<selector>
: 这是核心部分,表示你想获取的资源路径。例如,一个文件的路径可能是/dir/file.txt
。 -
<tab>
: 制表符(ASCII 9),用于分隔字段。 -
<host>
: 服务器地址。 -
<port>
: 端口号,通常是 70。 -
<cr><lf>
: 回车换行,表示请求结束。
关键点在于: Gopher 的 <selector>
字段是一个不透明的字符串,服务器会原样解析它。它可以包含一些特殊字符来表达不同的资源类型。
-
如果
selector