4

我想知道为什么 websocket 协议的设计者决定使用 GET 方法而不是创建一个名为“WS”的新方法?

由于许多框架都能够通过方法和 url 进行路由,所以这会很酷。有反对新方法的理由吗?

4

2 回答 2

3

来自RFC 6455,第 1.3 节:

打开握手旨在与基于 HTTP 的服务器端软件和中介兼容,以便 HTTP 客户端与该服务器通信和 WebSocket 客户端与该服务器通信都可以使用单个端口。

和 1.8:

当连接到一个由 HTTP 服务器共享的端口时(这种情况很可能发生在端口 80 和 443 的流量中),该连接在 HTTP 服务器看来是一个常规的 GET 请求,带有升级优惠。在相对简单的设置中,只有一个 IP 地址和一个服务器来处理到单个主机名的所有流量,这可能为基于 WebSocket 协议的系统提供了一种实用的部署方式。

这需要对 Web 服务器本身进行很少或不需要配置,因为支持它的编程语言可以很容易地扩展以理解和执行将通道升级到 WebSockets。引入新的请求方法需要 HTTP 服务器理解这种方法。

如果您真的对原因感兴趣,请随时搜索/阅读http://www.ietf.org/mail-archive/web/hybi/邮件列表。我认为处理这个问题的讨论的标题是“关于 WEBSOCKET 与现有方法(在 GET 与 OPTIONS 与新方法上的稻草民意调查)”


这是一个巨大的阅读,从这里开始。在草案 05 中,GET 被选中并且之后从未更改:

乔和我,作为主席,还没有看到从这个稻草民意调查中形成任何重要的共识。所以我们建议在不改变即将到来的 05 版本的方法的情况下继续前进,保持 GET 作为握手的方法,因为它在 WebSocket 握手中的行为已经在该领域进行了广泛的测试,现在众所周知,它是好是坏。

于 2013-08-06T13:30:17.717 回答
1

可能是为了保持与现有 HTTP/1.1 系统的兼容性。

HTTP/1.0 仅支持 3 种方法:GET、POST 和 HEAD。HTTP/1.1 添加了 PUT、DELETE、TRACE、OPTIONS、CONNECT 和 PATCH。

添加 WS 方法会破坏与所有现有 Web 系统的兼容性。

于 2013-08-06T12:56:05.413 回答