Redis 和 Gopher 协议

Redis Gopher 协议实现

** 注意:对 Gopher 的支持已在 Redis 7.0 中移除 **

Redis 包含了 Gopher 协议的一个实现,如 RFC 1436 中所规定。

Gopher 协议在 90 年代后期非常流行。它是 Web 的一种替代方案,其服务器端和客户端的实现都非常简单,以至于 Redis 服务器仅用 100 行代码就实现了对其支持。

如今 Gopher 有什么用处?嗯,Gopher 其实从未真正消亡,最近有一种运动旨在复兴由纯文本文档组成的更具层级结构的 Gopher 内容。有些人想要一个更简单的互联网,另一些人则认为主流互联网被控制得太多了,为那些想要一些新鲜空气的人创造一个替代空间是很酷的事情。

总之,在 Redis 的十周年生日之际,我们送给了它 Gopher 协议作为礼物。

工作原理

Redis Gopher 支持使用 Redis 的内联协议,特别是两种无论如何都是非法的内联请求:空请求或任何以 "/" 开头的请求(没有 Redis 命令以斜杠开头)。正常的 RESP2/RESP3 请求完全不在 Gopher 协议实现的路径上,并且像往常一样提供服务。

如果在启用 Gopher 时打开与 Redis 的连接并发送一个像 "/foo" 这样的字符串,如果存在一个名为 "/foo" 的键,它将通过 Gopher 协议提供服务。

为了创建一个真正的 Gopher“洞”(Gopher 交流中 Gopher 站点的名称),你可能需要一个脚本,例如 https://github.com/antirez/gopher2redis 中的那个。

安全警告

如果您计划将 Redis 部署在公共可访问的互联网地址上以提供 Gopher 页面,**请务必为实例设置密码**。一旦设置了密码,

  1. Gopher 服务器(启用时,默认不启用)将通过 Gopher 提供内容。
  2. 但是,在客户端进行身份验证之前,不能调用其他命令。

因此,请使用 requirepass 选项来保护您的实例。

要启用 Gopher 支持,请使用以下配置行。

gopher-enabled yes

访问非字符串类型或不存在的键将生成 Gopher 协议格式的错误。

评价此页面
回到顶部 ↑