【问题标题】:netty websocket connection via java client通过java客户端的netty websocket连接
【发布时间】:2012-09-13 09:57:22
【问题描述】:

是否可以在没有握手请求的情况下在 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";

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

【问题讨论】:

    标签: java websocket netty


    【解决方案1】:

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

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

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

    详情请见官方IETF 6455 WebSocket spec

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2015-05-22
      相关资源
      最近更新 更多