javascript websocket 是不是加密任何正在发送的数据?

Posted

技术标签:

【中文标题】javascript websocket 是不是加密任何正在发送的数据?【英文标题】:Does a javascript websocket encrypt any data being sent?javascript websocket 是否加密任何正在发送的数据? 【发布时间】:2020-09-22 15:56:24 【问题描述】:

所以我试图在 javascript 文件中设置客户端 websocket,与用 C# 编写的服务器通信。

客户:

var socket = new WebSocket("ws://localhost:11000");

function barf() 
    socket.send('asdf');


socket.onmessage = function(e)
     console.log(e.data);
     ;

服务器:

IPHostEntry ipHostInfo = Dns.GetHostEntry("localhost");
IPAddress ipAddress = ipHostInfo.AddressList[1];
TcpListener listener = new TcpListener(ipAddress, 11000);

try


    listener.Start();
    TcpClient client = listener.AcceptTcpClient();

    message = client.GetStream();
    int i = message.Read(bytes);

    string data = Encoding.ASCII.GetString(bytes, 0, i);

    string key = new System.Text.RegularExpressions.Regex("Sec-WebSocket-Key: (.*)").Match(data).Groups[1].Value.Trim();

    Byte[] response = GetHandshakeResponse(key);
    message.Write(response, 0, response.Length);

    bytes = new Byte[1024];
    i = message.Read(bytes);

    Console.WriteLine(Encoding.ASCII.GetString(bytes));

问题是,当我在我的 Javascript 文件中调用函数“barf”时,服务器每次都会吐出不同的消息,就好像它正在被加密一样。我尝试过使用不同的编码,但我似乎无法在服务器上得到完全正确的“asdf”。有没有人有任何见解?谢谢!

【问题讨论】:

你试过用 UTF-8 代替 ASCII 吗? 我确实尝试过使用 UTF-8。响应仍然是胡言乱语。 Web 套接字通信不仅仅是将其链接到原始套接字并从中读取数据 乱码是因为你正在发送一个TCP消息,此时WebSocket连接没有建立。您应该阅读一些关于如何在 C# 中使用 HTTP 切换协议实现 WebSocket 服务器的教程 WebSocket.send(string) sends USVString data as UTF-8. 【参考方案1】:

如果您想通过网络套接字加密通信,请使用 wss 协议而不是 ws。

另外,我认为您的测试没有意义,因为您没有在后端使用服务器套接字服务器运行它。

Creating a "Hello World" WebSocket example

【讨论】:

以上是关于javascript websocket 是不是加密任何正在发送的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何连接到它反应的 websocket 而不是普通的 javascript?

使用 websocket javascript 客户端发送文件

websocket 升级是不是仍然允许 http ajax 请求?

用 php 监听 WebSocket

解读 JavaScript 之深入探索 WebSockets 和 HTTP/2

将 Websocket-Connection 保持在多个页面上