1

是否可以在没有握手请求的情况下在 java 代码中创建 websocket 连接?

我知道如何使用以下命令创建一个握手请求:

  String request = "GET " + path + " HTTP/1.1\r\n"
            + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n"
            + "Host: " + host + "\r\n" + "Origin: " + origin + "\r\n"
            + extraHeaders.toString() + "\r\n";

但我想避免上述情况,一旦我打开一个套接字连接,只想沿着通道发送帧?..这可能吗?

4

1 回答 1

3

如果没有 WebSocket 握手,您将无法创建 WebSocket 连接。WebSocket 握手和成帧是协议的关键部分。握手是 HTTP 兼容的,并且允许 WebSockets 更容易地与现有的 Web 基础设施进行交互。除其他外,握手增加了安全机制并允许跨源资源共享 ( CORS )。

握手之后,每个 WebSocket 帧仍然不是原始数据。WebSocket 是基于消息的协议,因此帧头包含消息描述、帧长度、消息类型(二进制、文本、ping 等)等。此外,从客户端(浏览器)到服务器的数据必须使用运行 XOR 进行屏蔽面具。这是为了避免 HTTP 中介(代理、HTTP 缓存等)中存在理论上的漏洞。

不要被名称中的“Socket”所误导。WebSockets 具有原始 TCP 套接字的许多优点,例如全双工、双向、长寿命和低延迟,但它是基于消息的传输协议,在原始 TCP 套接字上分层并使用 HTTP 友好的握手。

有关详细信息,请参阅官方IETF 6455 WebSocket 规范

于 2012-09-13T13:11:16.393 回答