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