簡體   English   中英

為什么firefox有時會在服務器端打開兩個不同的套接字?

[英]Why firefox sometimes opens two different sockets on server side?

我在Firefox中啟動下面的腳本以連接並將文本消息發送到本地計算機上安裝的Websocket服務器。 您能解釋一下為什么firefox有時在服務器端打開兩個不同的套接字來執行此任務嗎? (在第二個套接字上,發送0-lentgh消息)。

<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請求?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM