什么是套接字劫持?

What is socket hijacking?

我正在阅读 post 关于 Rails 5 actioncable 的精彩介绍。上面写着:"Action Cable uses the Rack socket hijacking API to take over control of connections from the application server. "。 "socket hijacking" 是什么意思?

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

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

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

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

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

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


总之,在你指定的Rack Socket Hijacking API中,本质上提供了两种模式:

  • 全面劫持API

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

    • 这让应用程序在应用程序服务器已经发送 headers 之后控制套接字。这种模式基本上是用来串流的

所以 - 最后,套接字劫持基本上允许 ruby/rails 应用程序到 override/overtake 客户端套接字并在其上执行不同的功能,或者如您所写 - 从应用程序控制连接服务器。