拒绝套接字上的无效/意外请求



如何确保任何不符合套接字协议的无效或不需要的请求被拒绝,并且我的套接字没有关闭。

考虑一个简单的例子:

var net = require('net');
net.createServer(function(socket) {
    socket.on('data', function(data) {
        var parsedData = JSON.parse(data.toString());
    });
}).listen(5555);
server.listen(1337, '127.0.0.1');

并尝试从浏览器访问该端口,然后再次查看终端。它会产生以下错误:

undefined:1
GET / HTTP/1.1
^
SyntaxError: Unexpected token G
    at Object.parse (native)
    at Socket.<anonymous> (/home/agauniyal/projects/watch/watch.js:115:35)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.push (_stream_readable.js:126:10)
at TCP.onread (net.js:529:20)

现在,我完全同意访问该端口是我的一个错误,但关闭不同格式的套接字而不是拒绝该请求并不是理想的方法。如果有人试图访问该端口的Web服务器,但后来发现8080没有,该怎么办。

那么,我应该如何确保套接字没有关闭,而是拒绝该请求呢?

EDIT:之所以会发生这种情况,是因为我正在对从套接字接收的数据调用JSON.Parse(data.toString())方法,而http头没有被该方法解析。

整个问题都出现了,因为我得到了套接字响应,将其转换为字符串,然后将其解析为JSON。现在,在我的情况下,我必须确保传入数据是有效的JSON字符串,或者发现浏览器正在向该套接字发送请求。

为了获得真正的快速解决方案,我从传入数据中提取第一个单词,并将其检查为"GET"(浏览器发送的),如果它的评估结果为true,则不做任何其他操作。捕获JSON.parse错误也是更好的解决方案。

最新更新