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

时间:2015-03-29 07:02:45

标签: node.js sockets

如何确保套接字协议后面的任何无效或不需要的请求都被拒绝,我的套接字也没有关闭。

考虑一个简单的例子:



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)

现在我完全同意访问该端口是我的错误,但是关闭不同格式的套接字而不是拒绝该请求并不是理想的方法。如果有人试图访问该端口的网络服务器,后来才意识到在8080没有任何内容,该怎么办呢。

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

编辑:这可能发生,因为我正在从套接字和 http标头收到的数据上调用JSON.Parse(data.toString())方法不是被该方法解​​析。

1 个答案:

答案 0 :(得分:0)

整个问题上升是因为我得到套接字响应,将其转换为字符串然后将其解析为JSON。现在在我的情况下,我要么保证传入的数据是有效的JSON字符串,要么发现浏览器正在向该套接字发送请求。

对于实时快速修复,我从输入数据中提取第一个单词并检查它是否为&#39; GET&#39; (浏览器发送的),如果它的计算结果为true,那么就像我之前一样,什么都不做。捕获JSON.parse错误也是更好的解决方案。