如果我在节点中编写以下程序:
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);
然后使用http://xxx.xx.xxx.xx:35010
点击服务器我在控制台上看到request ended
两次 - 我不确定为什么单个HTTP请求导致它执行两次。
答案 0 :(得分:136)
这是正常的 - 您的浏览器会拨打多个电话。
例如,大多数浏览器都会调用抓取/favicon.ico
。
尝试记录网址:
console.log(req.url);
你会看到被叫的内容。
答案 1 :(得分:8)
通常,2)
由浏览器获取。所以,两个电话。
解决此问题的方法可以是检查请求URL是否为favicon.ico
。
favicon.ico
答案 2 :(得分:0)
另一件需要注意的事情是现代浏览器可能会预取或预加载页面。 Chrome 有时甚至会在您在地址栏中按 Enter 键之前执行此操作!
它可以在隐私和安全下禁用,但这会影响所有浏览。
您还可以检查 header Purpose: prefetch
并返回错误。 (我不确定官方的回应应该是什么。)
这种情况不太可能经常发生,但如果您正在测试 API,突然发出意外请求可能会很烦人,更糟的是危险。