Почему мой node.js веб-сервер получает несколько запросов от браузера? - PullRequest
0 голосов
/ 24 февраля 2020

Hy, я создаю простой http-сервер с сокетами из node.js native net модуля, который работает на "localhost: 4000" и выдает только "hello, world!" webpage.

Сервер работает нормально, и на моем сервере я делаю некоторые отладки с помощью сообщений console.log (): «прослушивание соединений», «клиент подключен», «полученные данные» и «отправка данных».

Моя проблема, когда я go в браузере и открываю веб-страницу, получая 3 соединения: 1- "GET / HTTP / 1.1", 2- "GET /favicon.ico HTTP / 1.1" и третье соединение не запросить что-либо только подключается к серверу.

Вот мой код веб-сервера:

const net = require('net') //import net module
const ip = "localhost"; //ip of connection
const port = 4000; //port of connection

const response = "HTTP/1.1 200 OK\n"+
"Content-Type: text/html; charset=UTF-8\n"+
"Content-Encoding: UTF-8\n"+
"Accept-Ranges: bytes\n"+
"Connection: keep-alive\n\n"+
"<h1>Hello, world!</h1>"; //"webpage" http response 

const server = net.createServer(); //create server
server.listen(port, ip); //starts server

server.on("listening", () => {
    console.log("-Listening connections");
}); //event called on servers starts listening for connections

server.on("connection", handleConnection); //event called when the client has connected

function handleConnection(socket){ //this callback runs when client connects
    console.log("("+socket.remoteAddress+":"+socket.remotePort+") connected");

    socket.on("data", (data) => { //event called when client send data to server
        console.log("-received data from: "+socket.remoteAddress+":"+socket.remotePort);
        console.log(data.toString());
        socket.write(response, () => { //sends the response (webpage) to client
            console.log("-sending response: "+socket.remoteAddress+":"+socket.remotePort)
            socket.end(); //close client connection
        });
    });

    socket.on("close", () => { //event called when client connection has closed
        console.log("-socket close");
    });
}

И это сообщения 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

сервер продолжает слушать (потому что он закрывается только после получения запроса), но без дополнительных запросов, и если я обновлю sh страницу, соединение, похоже, будет продолжаться с того места, где оно было прервано, и повторно использует последнее соединение сокета, живое ранее. Назад к сообщению console.log, приведенному выше, было завершено на "(127.0.0.1:57309), подключенном" , после refre sh браузер подключается к сокету, который работал, и сообщения журнала:

...
...(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)
...

Наконец ... как обрабатывать запросы этого браузера? Я просто хочу ответить на запрос получения веб-страницы и ничего более. Почему браузер требует 3 заявки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...