Chrome 拒绝与 netcat 网络服务器的连接

Chrome 拒绝与 netcat 网络服务器的连接

我设置了一个非常简单的 netcat 网络服务器来显示/etc/motd某些机器的文件,它在 Firefox 中运行良好,但在 Chrome 中偶尔会失败。我怀疑这是一个 HTTP 标头/缓存问题,但我不确定我需要做什么才能让 Chrome 正常运行。

我的脚本:

#!/bin/bash

while true
do { 
  echo -e "HTTP/1.1 200 OK\r\nContent-Length: $(cat -s /etc/motd | wc -c)\r\nContent-Type: text/plain\r\n\r\n"
  cat -s /etc/motd;
} | nc -l 2020
done

其作用是:

HTTP/1.1 200 OK
Content-Length: 252
Content-Type: text/plain

.../etc/motd file contents....

Firefox 似乎可以很好地处理这个问题,Chrome 有时也可以,但有时它会返回:

此网页无法使用

Google Chrome 尝试连接 machine.example.com 时被拒绝。该网站可能已关闭,或者您的网络配置不正确。

我还没有看到导致连接失败的任何特定模式,但是我目前的理论是 Chrome 期望看到某种额外的标头,或者连接可能突然关闭,Chrome 认为这意味着机器已关闭并且实际上不会重试。

答案1

netcat并非为可扩展性而设计,仅仅是一个调试工具。如果连接关闭,则nc停止监听。由于您有一个无限循环会nc再次启动,因此您经常会打开页面。请记住,大多数浏览器最初都会请求资源(例如/),但也会请求。由于不运行的/favicon.ico时间很短,因此此构造可能无法很好地处理这种情况。nc

如果你需要一个简单的网络服务器,你可以使用 Python。例如,要为当前目录提供服务:

python -m SimpleHTTPServer 2020

如果您使用的是 Python 3,则需要运行:

python -m http.server 2020

BaseHTTPServer 文档,您只需要添加一个请求处理程序。

相关内容