我设置了一个非常简单的 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 文档,您只需要添加一个请求处理程序。