[英]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.