You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用http模块搭建服务,访问一次却输出两次日志是什么原因?

问题原因

这是Chrome浏览器的默认行为导致的,你在地址栏输入地址访问时,浏览器会先后发起两次请求:

  • 第一次是你主动发起的对localhost:3000根路径的页面资源请求
  • 第二次是浏览器自动发起的对/favicon.ico网站图标文件的请求,用来在地址栏、标签页左侧显示站点专属图标,就算你站点没有提供这个资源,浏览器也会默认发送一次请求尝试获取

你当前的代码没有对请求路径做判断,所有路径的请求进入逻辑都会打印Incoming,因此两次请求就会对应两次控制台输出。

验证方案

你可以修改代码打印请求路径,直接验证该结论:

const http = require('http')
const server = http.createServer((req, res) => {
    // 新增打印请求路径的逻辑
    console.log('Incoming request path:', req.url)
    res.setHeader('Content-Type', 'text/plain')
    console.log('Incoming')
    res.write("Hello world, request granted!")
    res.end()
})

server.listen(3000, 'localhost', () => {
    console.log("Listening for requests on port 3000")
})

重启服务后再次访问,控制台会打印两次请求路径,第一次为/,第二次为/favicon.ico。

解决方案

如果要避免多余的打印,只需要在逻辑中过滤掉/favicon.ico的请求即可:

const http = require('http')
const server = http.createServer((req, res) => {
    // 过滤站点图标请求
    if(req.url === '/favicon.ico') {
        res.end()
        return
    }
    res.setHeader('Content-Type', 'text/plain')
    console.log('Incoming')
    res.write("Hello world, request granted!")
    res.end()
})

server.listen(3000, 'localhost', () => {
    console.log("Listening for requests on port 3000")
})

内容的提问来源于stack exchange,提问作者Ron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:09:00