Redis 和 Gopher 协议
Redis Gopher 协议实现
** 注意:Redis 7.0 中已移除对 Gopher 的支持 **
Redis 包含 Gopher 协议的实现,如 RFC 1436 中所述。
Gopher 协议在 90 年代末非常流行。它是一种网络替代方案,并且服务器和客户端端的实现非常简单,Redis 服务器只需 100 行代码即可实现此支持。
如今,您如何使用 Gopher?好吧,Gopher 从未真正“死亡”,最近出现了一场运动,旨在让由纯文本文档组成的 Gopher 更具层次结构的内容得以复活。一些人想要一个更简单的互联网,另一些人则认为主流互联网变得过于受控,为想要一点新鲜空气的人们创造一个替代空间很酷。
无论如何,在 Redis 的 10 岁生日时,我们送给了它 Gopher 协议作为礼物。
工作原理
Redis Gopher 支持使用 Redis 的内联协议,具体来说是两种原本非法的内联请求:空请求或以“/”开头的任何请求(没有以这种斜杠开头的 Redis 命令)。正常的 RESP2/RESP3 请求完全不在 Gopher 协议实现的路径中,并且也像往常一样得到服务。
如果在启用 Gopher 时打开与 Redis 的连接,并向其发送“/foo”之类的字符串,如果有一个名为“/foo”的键,则它将通过 Gopher 协议提供服务。
为了创建一个真正的 Gopher “洞”(在 Gopher 谈话中 Gopher 站点的名称),您可能需要一个脚本,例如 https://github.com/antirez/gopher2redis 中的脚本。
安全警告
如果您计划将 Redis 放在互联网上的公开可访问地址中以提供 Gopher 页面,请务必为实例设置密码。一旦设置密码
- Gopher 服务器(在启用时,并非默认)将终止通过 Gopher 提供内容。
- 但是,在客户端进行身份验证之前无法调用其他命令。
因此,请使用 requirepass
选项来保护您的实例。
要启用 Gopher 支持,请使用以下配置行。
gopher-enabled yes
访问不是字符串或不存在的键将在 Gopher 协议格式中生成错误。