【发布时间】:2017-04-07 03:37:53
【问题描述】:
让我简要介绍一下我想要完成的工作。
我有一个具有本地 IP 地址的设备(芯片和引脚终端),它已被编程为接收某些数据并对其进行处理。
示例:我以十六进制 "30 35" 发送字符串 "05",终端读取该字符串并将重新启动。
我尝试过使用SockJS-Client 以及内置的WebSockets。
但是使用 Websockets 我注意到浏览器正在发送:
GET / HTTP/1.1
Host: IP:PORT
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: MYIP
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Sec-WebSocket-Key: A1CeTMFnQCZv4GNZbLFnyQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
当我的代码看起来像这样时:
var exampleSocket = new WebSocket("ws://IP:PORT");
exampleSocket.send("05");
如果我把代码改成这样:
var exampleSocket = new WebSocket("wss://IP:PORT");
exampleSocket.send("05");
我只收到了 3 个发送的标签:SYN(0x0016) ETX(0x0003) SOH(0x0001)
现在我不确定您是否需要一个 WebSocket Sever 才能解释传入的数据。
SockJS 通过发送有关自身和浏览器的额外信息来做同样的事情:
GET /info?t=1452272641278 HTTP/1.1
Host: IP:PORT
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Origin: MYIP
Accept: */*
Referer: MYIP
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
所以我想我的问题是。有没有办法只发送我想要的东西?没有任何额外的数据?
我已经在 Objective-C 和 C# 中完成了这个,我只是不确定 javascript 是否可以做到这一点?
如果有什么不清楚的地方请询问,我会尽力澄清。
【问题讨论】:
-
为什么通过JS连接本地网络设备很重要?难道不能在服务器上这样做并通过 AJAX 事件进行交易吗?
-
选择另一种语言,几乎可以选择任何其他语言,而且它相对简单,但是(浏览器)JavaScript 根本不是设计来这样做的。否则,进行反射攻击将是小菜一碟。
标签: javascript websocket sockjs