86 votes

nodejs - http.createServer semble appeler deux fois

Si j'écris le programme suivant en node :

  http.createServer(function (req, res) {

    if( req.method == 'GET' ) {
      var body = ''; req.on('data', function(data) { body += data });
      req.on('end',  function() {
        console.log('request ended')
      });
    }

    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('142\n');
  }).listen(3500);

Ensuite, on frappe le serveur avec http://xxx.xx.xxx.xx:35010 Je vois un request ended deux fois sur ma console -- je ne suis pas sûr de savoir pourquoi une seule requête HTTP provoque une double exécution.

181voto

3on Points 3489

C'est normal - votre navigateur effectue plus d'un appel.

La plupart des navigateurs font un appel à grab /favicon.ico par exemple.

Essayez d'enregistrer l'url :

console.log(req.url);

et vous verrez ce qui est appelé.

21voto

chapagain Points 6536

En général, favicon.ico est récupéré par les navigateurs. Ainsi, les deux appels.

La solution à ce problème peut consister à vérifier l'URL de la requête si elle est récupérée. favicon.ico ou non.

http.createServer(function (req, res) {
    if (req.url != '/favicon.ico') {
        // do your stuffs
    }
}).listen(3500);

0voto

Simon_Weaver Points 31141

Une autre chose à laquelle il faut faire attention est que les navigateurs modernes peuvent prélever ou précharger des pages. Chrome le fait même parfois avant que vous n'appuyiez sur la touche "Entrée" de la barre d'adresse !

Il peut être désactivé sous Vie privée et sécurité mais cela affectera toutes les navigations.

enter image description here

Vous pouvez également vérifier en-tête Purpose: prefetch et renvoie simplement une erreur. (Je ne sais pas quelle devrait être la réponse officielle en production).

Il est peu probable que cela se produise fréquemment, mais si vous testez une API, il peut être au mieux ennuyeux et au pire dangereux qu'une demande inattendue soit soudainement émise.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X