【问题标题】:Get full response of Websocket connect获取 Websocket 连接的完整响应
【发布时间】:2017-03-31 13:25:15
【问题描述】:

我的代码:

<script>
// Create WebSocket connection.
const socket = new WebSocket('wss://echo.websocket.org:443');

// Connection opened
socket.addEventListener('open', function (event) {
    socket.send('Hello Server!');
});

// Listen for messages
socket.addEventListener('message', function (event) {
    console.log('Message from server', event.data);
});
</script>

输出:

Message from server Hello Server!

我的问题是,是否可以获得包含 HTTP 标头和 TLS 证书的完整响应?

谢谢。

【问题讨论】:

  • 好吧,简而言之...套接字是最佳的,因为它们的信息量很小,这意味着标题很小。如果需要,您可以在其标题中传递一些数据。
  • 探索event对象..
  • WebSocket 不是 HTTP,它只是使用 HTTP 发起连接。一旦建立连接,就不再涉及 HTTP。 WebSocket API 不公开对初始 HTTP 响应、TLS 信息甚至底层套接字的访问。您从服务器获得的消息数据是服务器实际发送的完整消息数据,减去仅用于传输目的的帧和加密。

标签: javascript html ssl websocket http-headers


【解决方案1】:

我的问题是,是否可以获得包含 HTTP 标头和 TLS 证书的完整响应?

不,不是。浏览器中的 WebSocket 接口不会公开该信息。 HTTP 用于建立初始 WebSocket 连接,但之后协议更改为 WebSocket 协议,不再使用 HTTP。 WebSockets 的浏览器接口不公开自定义标头。您可以请求一个 URL(带有协议、端口、域、路径、查询字符串等),并且您可以发送零个或多个子协议字符串。就是这样。

来自 MDN,这是建立 WebSocket 连接的接口:

WebSocket WebSocket(
  in DOMString url,
  in optional DOMString protocols
);

一旦连接从 HTTP 升级到 WebSocket 协议,就不再有 HTTP 头了。如您所见here on MDN,该数据在 WebSocket 帧中发送。在该数据帧格式中,您将从该帧获取所有有效负载数据,而不是用于描绘帧和管理安全性的内务字节。没有标题可以获取。

如果连接是 TLS,那对您来说是完全透明的,也不会提供任何信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2023-01-09
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多