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

基于Netcat的简易Bash Web服务器在Chrome中不稳定如何修复?

修复基于Netcat的Bash简易Web服务器Chrome连接重置问题

问题分析

你的脚本核心问题是:Chrome会同时发起两个请求(页面内容和favicon.ico),而原脚本里nc -lp 80每次只能处理一个连接,处理完才会通过while循环重启nc。第二个请求到来时nc尚未完成重启,导致连接被重置,出现ERR_CONNECTION_RESET错误。即便加了-k选项,默认nc也是串行处理连接,依然无法响应并行请求。

可行修复方案

方案1:结合nc -k与后台子进程处理

通过nc -lk保持持续监听,同时将每个连接的响应逻辑放到后台子进程中,让主nc进程无需等待响应完成即可接受新连接:

#!/usr/bin/env bash

# 预生成响应内容,包含正确的Content-Length
HTML_CONTENT="<!DOCTYPE html><HTML><BODY>Test</BODY></HTML>"
RESPONSE=$(cat <<-EOF
HTTP/1.1 200 OK
Content-Length: ${#HTML_CONTENT}
Connection: close

${HTML_CONTENT}
EOF
)

# 持续监听80端口,每个连接触发后台响应
nc -lkp 80 | while read -r _; do
    # 后台输出响应,避免阻塞主监听进程
    echo -e "$RESPONSE" &
    # 丢弃剩余的请求数据,防止影响下一次连接处理
    cat > /dev/null
done

方案2:后台循环快速重启nc

如果你的nc版本不支持-k选项,可以通过后台启动nc实例,配合短暂延迟确保端口能被快速重新监听:

#!/usr/bin/env bash

HTML_CONTENT="<!DOCTYPE html><HTML><BODY>Test</BODY></HTML>"
RESPONSE="HTTP/1.1 200 OK\nContent-Length: ${#HTML_CONTENT}\nConnection: close\n\n${HTML_CONTENT}\n\n"

# 后台循环启动nc,确保端口始终有监听进程
while true; do
    (echo -en "$RESPONSE" | nc -lp 80) &
    # 短暂延迟避免端口占用冲突(根据nc版本调整)
    sleep 0.05
done

方案说明

  • 方案1利用nc -k保持监听,通过后台子进程处理响应,主进程立即回到监听状态,能同时处理Chrome的并行请求。cat > /dev/null用于清空请求缓冲区,防止未处理的请求数据干扰后续连接。
  • 方案2通过后台启动nc实例,循环快速重启,确保端口不会出现无监听的空档期,让Chrome的第二个请求能被新启动的nc实例处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:27:46