为什么my node.js Web服务器从浏览器接收多个请求?
Hy,我正在制作一个简单的http服务器,其中包含node.js原生网络模块的套接字,该模块运行在“localhost:4000”上,只提供“hello,world!”网页 服务器运行正常,在我的服务器上,我使用console.log()进行了一些调试,包括:“侦听连接”、“客户端连接”、“接收数据”和“发送数据” 我的问题是当我打开浏览器打开网页时,我得到了3个连接:1-“GET/HTTP/1.1”2-“GET/favicon.ico HTTP/1.1”,第三个连接不请求任何东西,只连接到服务器 以下是我的Web服务器代码:为什么my node.js Web服务器从浏览器接收多个请求?,node.js,sockets,http,browser,webserver,Node.js,Sockets,Http,Browser,Webserver,Hy,我正在制作一个简单的http服务器,其中包含node.js原生网络模块的套接字,该模块运行在“localhost:4000”上,只提供“hello,world!”网页 服务器运行正常,在我的服务器上,我使用console.log()进行了一些调试,包括:“侦听连接”、“客户端连接”、“接收数据”和“发送数据” 我的问题是当我打开浏览器打开网页时,我得到了3个连接:1-“GET/HTTP/1.1”2-“GET/favicon.ico HTTP/1.1”,第三个连接不请求任何东西,只连接到服务
const net=require('net')//导入网络模块
const ip=“localhost”//连接的ip地址
常数端口=4000//连接端口
const response=“HTTP/1.1 200正常\n”+
“内容类型:text/html;字符集=UTF-8\n”+
“内容编码:UTF-8\n”+
“接受范围:字节\n”+
“连接:保持活动\n\n”+
“你好,世界!”//“网页”http响应
const server=net.createServer()//创建服务器
监听(端口,ip)//启动服务器
server.on(“侦听”,()=>{
log(“-侦听连接”);
}); //服务器上调用的事件开始侦听连接
打开服务器(“连接”,handleConnection)//客户端已连接时调用的事件
函数handleConnection(socket){//此回调在客户端连接时运行
console.log(“(“+socket.remoteAddress+”:“+socket.remotePort+”)已连接”);
socket.on(“data”,(data)=>{//当客户端向服务器发送数据时调用的事件
console.log(“-从:“+socket.remoteAddress+”:“+socket.remotePort”接收的数据);
log(data.toString());
write(response,()=>{//将响应(网页)发送到客户端
console.log(“-发送响应:“+socket.remoteAddress+”:“+socket.remotePort”)
socket.end();//关闭客户端连接
});
});
socket.on(“close”,()=>{//当客户端连接关闭时调用的事件
console.log(“-socketclose”);
});
}
这是浏览器连接时的console.log消息:
-Listening connections
(127.0.0.1:57306) connected
-received data from: 127.0.0.1:57306
-sending response: 127.0.0.1:57306
-socket close
(127.0.0.1:57308) connected
-received data from: 127.0.0.1:57308
-sending response: 127.0.0.1:57308
-socket close
(127.0.0.1:57309) connected
服务器仍在侦听(因为它只有在收到请求后才关闭),但没有更多的请求,而且如果我刷新页面,连接似乎会在它停止的地方继续,重新使用之前活动的最后一个套接字连接。
返回控制台。上面的日志消息已在“(127.0.0.1:57309)已连接”上完成,刷新后,浏览器将连接到正在验证的套接字,日志消息为:
...
...(same msg above)
...
-received data from: 127.0.0.1:57608
-sending response: 127.0.0.1:57608
-socket close
...
...(and keeping this loop every page refresh, like reusing las socket openned)
...
最后。。。如何处理此浏览器请求?我只想回应“网页获取请求”而已。为什么使用浏览器resquest 3请购单?是否尝试使用socket.io?这里有一点关于它的解释。。。是的,socket.io和内置http模块。两者都很好,但我的目标是使用低级别的api来实现这一点,因为我将来必须使用它。io和http模块是网络套接字/流的抽象,现在我正在搜索它是如何实现的。我发现这篇文章将回顾http请求和响应的结构,并介绍node的流api。