什么是套接字劫持?

Hai*_*Cao 2 ruby sockets rack ruby-on-rails http

我正在阅读一篇关于 Rails 5 可操作介绍的精彩文章。其中写道:“Action Cable 使用 Rack 套接字劫持 API 来接管对应用服务器连接的控制。”。“套接字劫持”是什么意思?

Luk*_*err 5

套接字劫持是通过rack 1.5.0模块化 Ruby Web 服务器接口实现的。

\n\n

Rack 1.5.0基本上为在 Rails 中开发应用程序提供了一个简单且适应性强的界面。它通过以简单的方式包装 HTTP 请求及其响应来实现此目的。它还将 Web 服务器、Web 框架和中间件的 API 组合到单个方法调用中。

\n\n

因此,rack 1.5.0套接字劫持用于允许 Rails 应用程序超越客户端套接字并对其执行其他操作。这些操作包括:

\n\n
    \n
  • 实施WebSocket
  • \n
  • 流数据
  • \n
  • 用户浏览器和服务器之间的其他交互
  • \n
\n\n
\n\n

WebSockets允许用户向服务器发送消息并接收事件驱动的响应,而无需轮询服务器以获得回复。

\n\n

如下图所示 - 正如您所看到的,一旦打开 WebSocket 连接,就可以在用户和服务器之间发送和接收消息。

\n\n

WebSockets

\n\n
\n\n

无论如何,在您指定的机架套接字劫持 API中,它本质上提供了两种模式:

\n\n
    \n
  • 完整的劫持API

    \n\n
      \n
    • 这使应用程序可以完全控制通过套接字的内容。应用程序服务器不会通过套接字发送任何内容,并让应用程序处理它。
    • \n
  • \n
  • 部分劫持API

    \n\n
      \n
    • 在应用程序服务器已发送标头后,这使应用程序可以控制套接字。该模式主要用于流媒体。
    • \n
  • \n
\n\n

所以 - 最后,套接字劫持基本上允许 ruby​​/rails 应用程序覆盖/超越客户端套接字并在其上执行不同的功能,或者正如您所写的那样 - 控制来自应用程序服务器的连接。

\n