Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么firefox有时会在服务器端打开两个不同的套接字?_Javascript_Sockets_Firefox_Websocket - Fatal编程技术网

Javascript 为什么firefox有时会在服务器端打开两个不同的套接字?

Javascript 为什么firefox有时会在服务器端打开两个不同的套接字?,javascript,sockets,firefox,websocket,Javascript,Sockets,Firefox,Websocket,我在Firefox中启动下面的脚本,连接并发送文本消息到安装在本地计算机上的Websocket服务器。你能解释一下为什么firefox有时会在服务器端打开两个不同的套接字来完成这个任务吗?(在第二个套接字上有send 0-lentgh消息) 当websocket握手正常,并且脚本发送“hi”消息时,firefox似乎会再打开一个套接字,发送0长度的消息,然后关闭它。(第一个套接字仍然打开,我可以使用它。)快速猜测-这可能是客户端意外的favicon请求 我们发出第二个TCP套接字连接,以防第一

我在Firefox中启动下面的脚本,连接并发送文本消息到安装在本地计算机上的Websocket服务器。你能解释一下为什么firefox有时会在服务器端打开两个不同的套接字来完成这个任务吗?(在第二个套接字上有send 0-lentgh消息)


当websocket握手正常,并且脚本发送“hi”消息时,firefox似乎会再打开一个套接字,发送0长度的消息,然后关闭它。(第一个套接字仍然打开,我可以使用它。)

快速猜测-这可能是客户端意外的favicon请求

我们发出第二个TCP套接字连接,以防第一个的SYN 在运输途中丢失。这在HTTP浏览器中是相当标准的 (即引导WebSocket)。不知道为什么Chrome不起作用 它--它们是用于常规HTTP IIRC的


因此,显然,确保SYN数据包到达目标是一种常见的技术。

您可以提供后端获得的HTTP请求吗?@vtortola我提供了HTTP请求,服务器从浏览器获得。然后服务器响应,建立websocket连接并发送数据(“hi”消息)。之后,firefox似乎会打开另一个套接字并在一个月内关闭它。第二个套接字的HTTP头与此套接字的HTTP头相同吗?@vtortola第二个打开的套接字不会接收任何HTTP头或任何数据(0长度缓冲区)。它的打开和关闭速度非常快。不太可能,OP似乎在websocket连接上体验到这种情况,而不是在favicon路径上。
<html> 
  <head>
   <script>
    function ws_connect() 
    {

        ws = new WebSocket('ws://localhost:8080');
        ws.binaryType = "arraybuffer";
        ws.onopen = function(event)            
        {     
          var buf = new Uint8Array(2);
          buf[0] = "hi".charCodeAt(0);
          buf[1] = "hi".charCodeAt(1); // send message
          ws.send(buf.buffer);  
        }
        ...   
     }
   </script>
  <script> window.onload = function() {ws_connect();};</script>
  </head>
GET / HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Sec-WebSocket-Version: 13
Origin: http://localhost:8383
Sec-WebSocket-Key: tEPJwmPYq9b2aMu7KfcpjQ==
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket