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



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

<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>

当我启动上面的脚本时,我在服务器端得到了预期的数据(我打印缓冲区,存储来自firefox的第一个数据):

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

当websocket握手可以,脚本发送"hi"按摩时,firefox似乎又打开了一个套接字,发送0长度按摩,然后关闭它。(第一个套接字仍然打开,我可以使用它。)

https://bugzilla.mozilla.org/show_bug.cgi?id=786647

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

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

快速猜测-这可能是客户端意外的favicon请求如何阻止favicon.ico请求?

相关内容

  • 没有找到相关文章

最新更新